Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板typename作为同一模板的其他参数的类型_C++_Templates - Fatal编程技术网

C++ 模板typename作为同一模板的其他参数的类型

C++ 模板typename作为同一模板的其他参数的类型,c++,templates,C++,Templates,我想创建一个模板,在这里我可以使用不同的向量类型,以及一个常量作为相同类型的向量。 我希望能够将常量作为模板参数传递,以便让编译器优化它,而无需显式专门化 所以我尝试重新使用类型参数,但得到了非法的类型 #include <vector> using namespace std; template<typename WEIGHT, WEIGHT multiplier> void test_multipier(vector<WEIGHT> &v) {

我想创建一个模板,在这里我可以使用不同的向量类型,以及一个常量作为相同类型的向量。 我希望能够将常量作为模板参数传递,以便让编译器优化它,而无需显式专门化

所以我尝试重新使用类型参数,但得到了非法的类型

#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;
}
#包括
使用名称空间std;
模板
无效测试(向量和v)
{
uint16_t num=16;
/*...*/
权重w=乘数*(num);
v、 推回(w);
}
int main()
{
向量测试;
测试向量;
//^^错误C2993“double”:非类型模板参数“乘数”的类型非法
返回0;
}
复制自:

[非类型模板参数的类型]是以下类型之一(可选cv限定,忽略限定符):

  • std::nullptr\u t
    (从C++11开始)
  • 积分型
  • 左值引用类型(对象或函数)
  • 指针类型(指向对象或函数)
  • 指向成员类型的指针(指向成员对象或成员函数)
  • 枚举类型

double
不能用作非类型模板参数。

非类型模板参数不能为浮点类型。将其作为第二个参数传递。重复: