【问题标题】:C++ template argument with expression带有表达式的 C++ 模板参数
【发布时间】:2013-08-08 05:50:33
【问题描述】:

我在使用 C++ 时遇到问题。我希望能够将表达式作为参数放入模板中。这是我的代码:

#include <vector>
using namespace std;

vector<  ((1>0) ? float : int) > abc() {
}

int main(void){
  return 0;
}

这给了我错误:

main.cpp:11:14: 错误:模板参数 1 无效
main.cpp:11:14:错误:模板参数 2 无效
main.cpp:11:15:错误:“{”令牌之前的预期 unqualified-id

最后,我希望能够将 1 和 0 替换为任何内容,还希望将 float 和 int 替换为类型名 T 和 U。为什么它认为有两个参数?我该如何解决这个问题?

(对不起,如果这是重复的,我确实很好地寻找了解决方案)

【问题讨论】:

    标签: c++ templates


    【解决方案1】:

    使用std::conditional:

    #include <type_traits> 
    std::vector<std::conditional<(1 > 0), float, int>::type> abc() {}
    

    【讨论】:

    • 您需要在1 &gt; 0 周围加上括号,以便编译器将其解析为条件表达式而不是vector&lt;std::conditional&lt;1&gt; ...
    • @Casey,谢谢,我以为可以推断出来,但我显然错了。
    • 哎呀,还有一个类型名。当我在 SO 上时,我真的应该保持清醒。
    • @Casey,无依赖模板参数(测试以防万一,并使用 GCC 4.8.1 编译)。
    • @Matt,我现在不得不问,typename 有什么特别的原因吗?没有依赖的模板参数,并且它在没有 GCC 4.8.1 的情况下编译得很好,但是如果现在有两个其他人已经编辑了它,我有点怀疑。
    猜你喜欢
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多