C++ 重载C++;

C++ 重载C++;,c++,overloading,C++,Overloading,我有以下类定义: 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; }; 模板 类别SEQ访客{ 公众: typedef字符串*返回_类

我有以下类定义:

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;
};
模板
类别SEQ访客{
公众:
typedef字符串*返回_类型;
回访式访问(int elem)常量;
回访式访问(charelem)const;
回访式访问(要素)常量;
};
当我使用
SeqVisitor
时,调用visit是不明确的。如果我在类定义之外定义函数,那么对该函数的调用就不会有歧义。编译器将选择具有 在“T元素”上加上“char元素”。可以修复我的类定义,使其显示相同的行为。那就是消除歧义。

也许吧

return_type visit(char elem) const;
return_type visit(T elem, ...) const;
也许吧


我相信你已经知道了——如果你知道的话 正在尝试从类外调用visit() 您的typedef在您的类中。为什么不呢 typedef在类之外的某个位置,如果它是visit()的话 类的用户正在调用函数(我不是 当然,如果这就是你想要做的)

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

如果您确实只在
同学们,你们所拥有的一切都是有意义的,我相信你们已经知道了——如果你们知道的话 正在尝试从类外调用visit() 您的typedef在您的类中。为什么不呢 typedef在类之外的某个位置,如果它是visit()的话 类的用户正在调用函数(我不是 当然,如果这就是你想要做的)

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

如果您确实只在
类,你所拥有的是有意义的

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