作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用我通过显示代码正常运行的教程找到的这个 vector 。但是,当我尝试在我的项目中使用它时,它返回错误“错误 C3211:‘vector::vecarg’:显式特化正在使用部分特化语法,请改用模板 <>”
只是有错误的部分
template< class ta_a >
class vecarg
{
const ta_a& Argv;
public:
inline vecarg(const ta_a& A) : Argv(A) {}
inline const float Evaluate(const int i) const
{
return Argv.Evaluate(i);
}
};
template< class ta_a>
class vecarg< const float >
{
const ta_a& Argv;
public:
inline vecarg(const ta_a& A) : Argv(A) {}
inline const float Evaluate(const int i) const
{
return Argv;
}
};
template< class ta_a >
class vecarg< const int >
{
const ta_a& Argv;
public:
inline vecarg(const ta_a& A) : Argv(A) {}
inline const float Evaluate(const int i) const
{
return (float)Argv;
}
};
如果我通过更改为
来更正此错误template< >
class vecarg< const float >
{
const ta_a& Argv;
然后错误变为“标识符‘ta_a’未定义”
非常感谢任何关于解决方案的建议。
最佳答案
这是错误的:
template< class ta_a>
class vecarg< const float >
这是一个错误,因为 vecarg
只有一个模板参数:它可以专用于该参数,但没有更多的模板参数。但是这段代码试图写两个参数,ta_a
和 float
.
错误消息谈论“部分特化”,因为 template<class T>
引入了特化必须是部分的(它不是完整的,因为它仍然有参数 T
)。
完整特化的代码是:
template<> // zero parameters which have not been specialized
class vecarg< const float >
{
const float& Argv;
public:
vecarg(const float& A) : Argv(A) {}
const float Evaluate(const int i) const
{
return Argv;
}
};
我删除了多余的 inline
说明符。您需要对其他特化尝试进行类似的更改。
如果此代码的作者声称它已编译,他/她一定有一些非常古怪的编译器。
关于c++ - 显式特化是使用部分特化语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36809411/
我是一名优秀的程序员,十分优秀!