我可以强制编译器只接受 constexpr
或函数的非变量输入吗?
我正在寻找只允许编译时值的函数。使用模板或任何其他方法。
Here ,有一个 int
模板的工作示例。 double
的问题在于它们不能用作模板参数。
#include <iostream>
template <double x>
void show_x()
{
std::cout<<"x is always "<<x<<" in the entire program."<<std::endl;
}
int main()
{
show_x<10.0>();
return 0;
}
error: ‘double’ is not a valid type for a template non-type parameter
更新
对于那些将这个问题标记为重复的人,我不得不说:
我问问题
How to solve problem A?
和
Solution B does not work for problem A, I need another solution
然后你将我链接到为什么解决方案 B
不起作用。
这完全不合逻辑。
最佳答案
这里有两种方式:
更新:
有关用户规避的问题已得到解决。现在,X::value()
在使用之前由函数体内的 constexpr
变量获取。如果没有名为 value()
的 constexpr
方法,现在无法传递 X
。
#include <iostream>
struct always_10
{
constexpr static double value() { return 10.0; }
};
template <class X>
void show_x()
{
constexpr auto x = X::value();
std::cout<<"x is always "<< x <<" in the entire program."<<std::endl;
}
template<class X>
void show_x(X x_)
{
constexpr auto x = x_.value();
std::cout<<"x is always "<< x <<" in the entire program."<<std::endl;
}
int main()
{
show_x<always_10>();
show_x(always_10());
return 0;
}
关于c++ - 强制编译器只接受编译时参数( float ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39433759/