我是否可以强迫编译器只接受函数的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;
}错误:“double”不是模板非类型参数的有效类型。
更新
对于那些把这个问题标为重复问题的人,我要说的是:
我问你问题
如何解决问题A?
和
解决方案B不适用于问题A,我需要另一个解决方案
然后,您将我与解决方案B不工作的原因联系起来。
这完全不合逻辑。
发布于 2016-09-11 08:17:08
以下是两种方法:
更新:
对用户规避的担忧已经得到解决。现在,在使用之前,函数体中的X::value()由一个constexpr变量获取。如果没有名为X的constexpr方法,现在就不可能传递value()。
#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;
}https://stackoverflow.com/questions/39433759
复制相似问题