首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制编译器只接受编译时参数(浮点)

强制编译器只接受编译时参数(浮点)
EN

Stack Overflow用户
提问于 2016-09-11 07:17:43
回答 2查看 787关注 0票数 7

我是否可以强迫编译器只接受函数的constexpr或非变量输入?

我希望只允许编译函数的时间值。使用模板或任何其他方法。

Here,有一个适用于int模板的示例。double的问题是它们不能用作模板参数。

代码语言:javascript
复制
#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不工作的原因联系起来。

这完全不合逻辑。

EN

Stack Overflow用户

发布于 2016-09-11 08:17:08

以下是两种方法:

更新:

对用户规避的担忧已经得到解决。现在,在使用之前,函数体中的X::value()由一个constexpr变量获取。如果没有名为Xconstexpr方法,现在就不可能传递value()

代码语言:javascript
复制
#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;
}
票数 4
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39433759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档