- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道以下是否可行。假设我有这样的代码:
template <class NumberType>
struct Number
{
NumberType value;
void operator = (Number in_val)
{
value = in_val;
}
}
然后我就可以做类似的事情了:
Number<int> n1, n2;
n2.value = 5;
n1 = n2;
cout << "Value: " << n1.value << endl;
但这不允许我执行以下操作:
Number<int> n1;
Number<double> n2;
n2.value = 5;
n1 = n2;
cout << "Value: " << n1.value << endl;
如何做到这一点?我是否必须用另一个结构/类包装这个结构/类,或者我是否必须进行一些奇特的递归?
附注我已经使用 C++ 一段时间了,但从未尝试过 templates
。所以考虑到我对模板非常陌生。
-- 编辑--好的,我现在明白了。但是另一个相关的问题来了。
template<class OtherNumType>
Number& operator *= ( const OtherNumType& in_value)
{
value *= in_value;
return *this;
}
这给出了一个编译错误。为什么?正确的做法是什么?
最佳答案
当模板定义Number<T>
编译器考虑任何特定类型 T
, 名字 Number
(当用作类型名称时)被解释为 Number<T>
,随便T
可能就在那个时候。
因此,对于 Number<int>
,您当前的模板定义仅提供以下赋值运算符:
void operator=(Number<int> in_val)
因为Number
被解释为 Number<int>
那时。
为了使运算符更加灵活,可以将其变成成员模板(已经模板化的类中的模板化函数):
template <class NumberType>
struct Number
{
NumberType value;
template <typename T2>
Number &operator=(const Number<T2> &in_val)
{
value = in_val.value;
return *this;
}
};
注意我是如何修改运算符的,不仅接受 Number<T2>
对于任何类型 T2
, 也让它返回 *this
并将参数作为常量引用接受——这是定义赋值运算符最常见和最有用的方法。
关于c++ - 同一模板的不同类类型相互交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12872227/
所以我有这个 UltraTicTacToe 游戏,我正在用 HTML/CSS/JS 编码。它由表中表中的表组成。当您单击 X 或 O 时,我想要突出显示您应该进入的下一个 TicTacToe 牌 ta
Some text Some more text 如何让每个 .example 的 .whatever 包含其 .test 的内容? 例如,如果代码是这样的: Som
我是一名优秀的程序员,十分优秀!