ar2*_*015 7 c++ templates c++11
我可以强制编译器只接受constexpr函数的一个或非变量输入吗?
我正在寻找只允许编译函数的时间值.使用模板或任何其他方法.
这里有一个int模板的工作示例.doubles 的问题是它们不能用作模板参数.
#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;
}
Run Code Online (Sandbox Code Playgroud)
错误:'double'不是模板非类型参数的有效类型
更新
对于那些将此问题标记为重复的人,我不得不说:
我问问题
如何解决问题A?
和
解决方案B不适用于问题A,我需要另一种解决方案
然后你链接我为什么解决方案B不起作用.
那是完全不合逻辑的.
我不确定你到底想要什么,但这是一种拒绝函数调用中非常量表达式的方法。不幸的是,它使用了一个由于名称污染而不好的宏,但也许如果你给你的函数一个奇怪的名称,那么它不会造成太大伤害:
void f(double d) {}
#define f(x) do { constexpr decltype(x) var = x; f(var); } while (0)
int main()
{
f(1.0); // OK
f(1 + 2); // OK, constant expression with implicit conversion
double e = 5.0;
f(e); // compilation error, `e` is not a constant expression
}
Run Code Online (Sandbox Code Playgroud)
如果您想拒绝不完全double类型的常量表达式,那也是可能的(从您的问题中不确定这是否是一个要求)。
| 归档时间: |
|
| 查看次数: |
597 次 |
| 最近记录: |