【问题标题】:Overloading member functions within template class in C++在 C++ 中的模板类中重载成员函数
【发布时间】:2012-06-07 20:50:12
【问题描述】:

我有以下类定义:

template <typename T>
class SeqVisitor {
public: 
    typedef string* return_type;

    return_type visit(int elem) const;
    return_type visit(char elem) const;
    return_type visit(T elem) const;
};

当我使用SeqVisitor&lt;char&gt; 时,调用访问是模棱两可的。如果我在类定义之外定义函数,那么对该函数的调用就不会模棱两可了。编译器会选择一个 在“T elem”上加上“char elem”。可以修复我的类定义,使其表现出相同的行为。那就是摆脱歧义。

【问题讨论】:

  • 您确定要string *,而不仅仅是string
  • @bobah 我不确定您指的是什么问题/答案,但如果它使用两个不同类型的变量,那么这里就行不通了。我只是在寻找一种方法来表达如果 T=int, T=char 则使用前两种方法,否则使用第三种方法。因此,不同的类型适用于 T=char 的情况,但不适用于 T 不是 char 或 int 的更一般的情况。
  • 就类型特征和 SFINAE 而言,有一种明显的方法可以做到这一点:如果 type_traits::is_same 为真,则不要定义 visit(T elem) 。您是在寻找那个,还是更简单的东西?
  • 是的。这就是我需要的。我了解特征的使用,但我没有与 SFINAE 建立联系并使用它来忽略定义访问。非常感谢。

标签: c++ overloading


【解决方案1】:

也许

return_type visit(char elem) const;
return_type visit(T elem, ...) const;

【讨论】:

    【解决方案2】:

    我相信你已经知道了——如果你知道的话 试图从你的课外调用 visit() 您的 typedef 在您的班级内。为什么没有 如果是 visit(),则 typedef 在类之外的某个地方 类的用户调用的函数(我不是 确定这是否是你想要做的)

    当我在课堂上尝试使用 typedef 时,我遇到了问题 从类外部调用函数 - 但是当 我把 typedef 移到了课外,我没有 问题。

    如果你真的只使用里面的 typedef 上课,你说的有道理

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      • 2016-10-03
      相关资源
      最近更新 更多