【发布时间】:2014-11-05 22:53:49
【问题描述】:
假设我们有这样的事情:
template <class B>
class A
{
void Foo(B& b)
{
b.Bar(0.5);
}
};
class B
{
void Bar(float) {}
void Bar(double) {}
void Bar(int) {}
};
在这段代码中,类型B 必须提供一个方法Bar(),它接受某个整数类型的参数。问题是这里所有 3 个版本的 B::Bar() 都是允许的。有没有办法只允许这些方法的一个版本,例如,只有在B 提供Bar(float) 时才编译?
【问题讨论】:
-
为什么B本身没有模板?
-
所以,为了弄清楚,您想要签入 A 吗?在我看来,您要求的是两种不同的东西 - 可以检查模板参数
B是否有一个采用浮点数的方法Bar。但这本身不会阻止像b.Bar(0);这样的事情。你能澄清一下吗? -
您将文字值传递给
Bar调用,我看不出您试图让编译器为您做您自己无法做到的事情。跨度>
标签: c++ templates interface implicit-conversion