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++模板的初学者。我正在尝试使用模板计算阶乘,并附上下面的代码。我想使用模板专门化替换ift==0部分,但到目前为止我还没有能力这样做。请帮忙 包括 template <class T> class Factorial { public: T factorial(T t) { if(t==0) return 1; fact[t] = t*factorial(t-1); std::cout<<"t and fact[t] "<<t<<", "<<fact[t]<<std::endl; return fact[t]; } void Print(T t) { std::cout<<"fact["<<t<<"] = "<<fact[t]<<std::endl; } private: T fact[100]; }; /* std::constexpr bool isZero(int x) { if(x==0) return true; } */ template<> class Factorial<0> { public: int factorial(int x) { return 1; } void Print(int t) { std::cout<<"special fact["<<t<<"] = "<<1<<std::endl; } }; int main() { Factorial<int> fact; fact.factorial(5); fact.Print(4); return 0; }_C++_Templates_Specialization - Fatal编程技术网

固定值的模板专门化 我是C++模板的初学者。我正在尝试使用模板计算阶乘,并附上下面的代码。我想使用模板专门化替换ift==0部分,但到目前为止我还没有能力这样做。请帮忙 包括 template <class T> class Factorial { public: T factorial(T t) { if(t==0) return 1; fact[t] = t*factorial(t-1); std::cout<<"t and fact[t] "<<t<<", "<<fact[t]<<std::endl; return fact[t]; } void Print(T t) { std::cout<<"fact["<<t<<"] = "<<fact[t]<<std::endl; } private: T fact[100]; }; /* std::constexpr bool isZero(int x) { if(x==0) return true; } */ template<> class Factorial<0> { public: int factorial(int x) { return 1; } void Print(int t) { std::cout<<"special fact["<<t<<"] = "<<1<<std::endl; } }; int main() { Factorial<int> fact; fact.factorial(5); fact.Print(4); return 0; }

固定值的模板专门化 我是C++模板的初学者。我正在尝试使用模板计算阶乘,并附上下面的代码。我想使用模板专门化替换ift==0部分,但到目前为止我还没有能力这样做。请帮忙 包括 template <class T> class Factorial { public: T factorial(T t) { if(t==0) return 1; fact[t] = t*factorial(t-1); std::cout<<"t and fact[t] "<<t<<", "<<fact[t]<<std::endl; return fact[t]; } void Print(T t) { std::cout<<"fact["<<t<<"] = "<<fact[t]<<std::endl; } private: T fact[100]; }; /* std::constexpr bool isZero(int x) { if(x==0) return true; } */ template<> class Factorial<0> { public: int factorial(int x) { return 1; } void Print(int t) { std::cout<<"special fact["<<t<<"] = "<<1<<std::endl; } }; int main() { Factorial<int> fact; fact.factorial(5); fact.Print(4); return 0; },c++,templates,specialization,C++,Templates,Specialization,首先,您的专门化是错误的:您不能专门化预期类型为值的参数上的模板。您可以在类型上专门化阶乘类模板。例如,你可以专门化 template <> class Factorial<int> { ... }; 如果您想在某个值上专门化模板,则需要使主模板在值方面移动,例如: template <int N> class Factorial { // primary template ... }; template <> class Fac

首先,您的专门化是错误的:您不能专门化预期类型为值的参数上的模板。您可以在类型上专门化阶乘类模板。例如,你可以专门化

template <>
class Factorial<int> {
    ...
};
如果您想在某个值上专门化模板,则需要使主模板在值方面移动,例如:

template <int N>
class Factorial { // primary template
    ...
};
template <>
class Factorial<0> { // specialization
    ...
};

接下来,您的计算实际上是一个运行时计算,您不能让编译器将运行时值的处理分派给模板专门化。如果你真的想做这样的事情,你需要以编程的方式来做。也就是说,一旦您在一个函数中,您就不能让编译器将一个函数参数分派给模板专门化。如果要将编译器分派到模板专用化,则需要使用常量表达式,可能是类模板的[static]成员形式。

首先,您的专用化是错误的:您不能在需要值类型的参数上专门化模板。您可以在类型上专门化阶乘类模板。例如,你可以专门化

template <>
class Factorial<int> {
    ...
};
如果您想在某个值上专门化模板,则需要使主模板在值方面移动,例如:

template <int N>
class Factorial { // primary template
    ...
};
template <>
class Factorial<0> { // specialization
    ...
};

接下来,您的计算实际上是一个运行时计算,您不能让编译器将运行时值的处理分派给模板专门化。如果你真的想做这样的事情,你需要以编程的方式来做。也就是说,一旦您在一个函数中,您就不能让编译器将一个函数参数分派给模板专门化。如果要将编译器分派到模板专用化,则需要使用常量表达式,可能是类模板的[static]成员形式。

使用递归模板编写的阶乘函数的示例多达数千个。我建议你先做一个工作示例,看看在像这样单飞之前是如何完成的。这里有成千上万个使用递归模板编写的阶乘函数示例。我建议你先做一个工作示例,看看在像这样单飞之前是如何完成的。