模板类的方法是否隐含inline
链接(不是在谈论内联优化),还是只是模板化方法?
// A.h
template<typename T>
class A
{
public:
void func1(); // #1
virtual void func2(); // #2
template<typename T2> void func3(); // #3
};
template<typename T>
void A<T>::func1(){} // #1
template<typename T>
void A<T>::func2(){} // #2
template<typename T>
template<typename T2>
void A<T>::func3<T2>(){} // #3
上述所有情况inline
[联动]? (我应该为其中任何一个明确写出inline
)吗?
答案 0 :(得分:11)
模板函数和模板类的成员函数如果是隐式实例化的,则隐式内联,但要注意模板特化不是。
template <typename T>
struct test {
void f();
}
template <typename T>
void test<T>::f() {} // inline
template <>
void test<int>::f() {} // not inline
缺乏更好的报价:
非导出模板必须在隐式实例化的每个翻译单元中定义(14.7.1),除非在某些翻译单元中明确实例化(14.7.2)相应的专业化;无需诊断