调用模板类型的成员函数有什么好方法?以下foo()
代码是否仅针对定义了bla()
函数的类型进行编译?
class A { void bla(); };
template<typename T>
void foo() {
T t;
t.bla();
}
int main() {
foo<A>();
return 0;
}
我可以使用boost::enable_if
仅为具有bla()
方法的类型定义此函数吗?如果是的话,那是不是一个好主意?我想象“概念”(我对此一无所知)可能需要在这里使用。
答案 0 :(得分:2)
对于你尝试调用foo函数的每个类型,编译器将使用给定的函数生成一个新的foo函数并编译,如果你可以使用给定的类型编译foo函数,它将起作用。
因此,在您的情况下,foo函数将适用于具有bla函数且具有默认构造函数的每个类型。
答案 1 :(得分:1)
您的代码示例看起来正确;如果在没有bla()
成员的类型上进行实例化,它将会出错。
答案 2 :(得分:1)
它也只会编译默认可构造的类型。编译器将为任何不是默认构造的类型抛出错误,并且没有可以不接受任何参数的bla()
函数。