0

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

4

3 回答 3

2

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

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

于 2011-06-19T20:34:09.540 回答
1

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

于 2011-06-19T20:31:08.963 回答
1

它也只会编译默认可构造的类型。对于任何不可默认构造且不具有不bla()接受任何参数的函数的类型,编译器都会抛出错误。

于 2011-06-19T20:33:28.573 回答