gpt4 book ai didi

c++ - 显式特化是使用部分特化语法

转载 作者:行者123 更新时间:2023-11-28 05:42:44 24 4
gpt4 key购买 nike

我正在尝试使用我通过显示代码正常运行的教程找到的这个 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_afloat .

错误消息谈论“部分特化”,因为 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com