C ++模板类型,它具有特定的成员方法

时间:2011-06-19 20:29:18

标签: c++ templates metaprogramming enable-if c++-concepts

调用模板类型的成员函数有什么好方法?以下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()方法的类型定义此函数吗?如果是的话,那是不是一个好主意?我想象“概念”(我对此一无所知)可能需要在这里使用。

3 个答案:

答案 0 :(得分:2)

对于你尝试调用foo函数的每个类型,编译器将使用给定的函数生成一个新的foo函数并编译,如果你可以使用给定的类型编译foo函数,它将起作用。

因此,在您的情况下,foo函数将适用于具有bla函数且具有默认构造函数的每个类型。

答案 1 :(得分:1)

您的代码示例看起来正确;如果在没有bla()成员的类型上进行实例化,它将会出错。

答案 2 :(得分:1)

它也只会编译默认可构造的类型。编译器将为任何不是默认构造的类型抛出错误,并且没有可以不接受任何参数的bla()函数。