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

C++ template type which has a specific member method

本文关键字:C++ 类型 成员方法      更新时间:2023-10-16

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

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

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

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

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