我想创建一个模板,我可以使用不同的矢量类型,并将常量作为矢量的相同类型。 我希望能够传递常量作为模板参数,以便让编译器对其进行优化,而不需要明确的专门化。
所以我试图重新使用type参数,但我得到了非法类型。
#include <vector>
using namespace std;
template<typename WEIGHT, WEIGHT multiplier>
void test_multipier(vector<WEIGHT> &v)
{
uint16_t num = 16;
/*...*/
WEIGHT w = multiplier* (num);
v.push_back(w);
}
int main()
{
vector<double> test_vector;
test_multipier<double,0.01>(test_vector);
//^^ Error C2993 'double': illegal type for non-type template parameter 'multiplier'
return 0;
}
答案 0 :(得分:2)
从cppreference.com复制:
[非类型模板参数的类型]是以下类型之一(可选择cv-qualified,忽略限定符):
std::nullptr_t
(自C ++ 11开始);- 整数类型;
- 左值引用类型(对象或函数);
- 指针类型(对象或函数);
- 指向成员类型的指针(指向成员对象或成员函数);
- 枚举类型。
double
不能用作非类型模板参数。