【发布时间】: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<char> 时,调用访问是模棱两可的。如果我在类定义之外定义函数,那么对该函数的调用就不会模棱两可了。编译器会选择一个
在“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