【发布时间】:2015-03-13 06:50:41
【问题描述】:
我有这个类模板:
template<class Q, class V>
bool EQ(const Q& q, V v) {
return q.Eq(v);
}
还有这个类:
struct TEq01 {
char n1;
TEq01(const void* p) : n1(*(char*)p) { }
bool Eq(char n) const { return n1 == n; }
};
假设我这样使用它 - 只指定第一个模板参数
char *sz = "some string";
bool f = EQ<TEq01>(sz, '1');
编译器如何知道 TEq01 是 class Q 而不是 class V?我正在使用 Visual Studio 2013。
【问题讨论】:
-
你就不能想出更好的标识符吗?至少对于这个例子?
-
哪些标识符?有很多!
-
TEq01,或EQ。常见的元句法名称是foo、bar或foobar。示例代码还包括许多冗余行,例如像Eq这样与问题本身无关的定义成员。 -
好的,我清理一下。我把它从我真正的实时代码中拿出来并修剪了一堆东西,但正如你所指出的那样还不够。一秒……
-
谢谢,这让问题阅读起来更有趣。
标签: c++ templates c++11 type-inference