【问题标题】:template parameter as variable模板参数作为变量
【发布时间】:2011-06-25 12:41:43
【问题描述】:

有没有办法将模板参数用作变量? 例如,如果我有一个函数

template<int dim>
void DomainGrid<dim>::getData(Data data_, int field_dim)
{
    int size_ = field_dim *dim; // Compiler Error Here
    for(int i =0; i<size_; ++i)
       std::cout<<data_[i]<<std::endl;
}

我可以获得类似的功能吗?编译此函数会在

处产生错误
invalid use of member (did you forget the ‘&’ ?)

无论是否调用函数都会出现错误

我猜是因为this问题...

【问题讨论】:

  • DomainGrid的定义是什么?您可能不应该说两次&lt;dim&gt;
  • 感谢您的回复.....是的,您是对的...但是在不同的上下文中,有一个函数 field_dim()。我实际上想使用成员 field_dim_。错误只是逃过了我的眼睛。

标签: c++ templates variables


【解决方案1】:

重命名模板参数或成员函数?

这似乎是最简单、最直接的解决方案。每当多个符号具有相同的名称时,您就有名称冲突的风险。所以在这种情况下不要为多个符号使用相同的名称。

(这是假设您有一个成员函数dim()。我根据错误消息假设是这样,但它可能是实际包含在问题中的有用信息。)

【讨论】:

    【解决方案2】:
    int size_ = field_dim *dim; // Compiler Error Here
    

    这很好。这不可能是错误。

    真正的问题不在于您在此处发布的代码。所以贴出DomainGrid的定义和完整的错误信息。

    【讨论】:

    • @Als:根据帖子和提供的信息,我认为这是一个答案。它告诉他寻找发布的代码中没有的真正问题。
    • @Als,如果您认为答案没有用,我们有一个否决按钮。
    • @Als:好吧,也许你应该更频繁地使用它。 ;) 否决按钮的存在是有原因的。 ;)
    • 我正在删除我的一些 cmets,因为后来对答案进行了某些修改,这让我的 cmets 感觉没有根据。
    • @Als:如果以 The real problem is not... 开头的第二句话让你的评论没有根据,那么之前的评论也是没有根据的,因为那句话中没有添加任何内容任何新的东西,除了它重复第一句话,因为第一句话几乎说问题不在 OP 认为的那一行,导致错误。
    猜你喜欢
    • 2014-06-20
    • 1970-01-01
    • 2020-02-23
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多