Geo*_*ton 9 c++ templates language-lawyer
我正在使用这个方法http://www.parashift.com/c++-faq-lite/separate-template-fn-defn-from-decl.html将C++模板函数的定义与其声明分开,以避免用代码混乱我的头文件.
该链接使用一个没有参数或返回的函数作为示例,但假设我有一个带参数的函数.该链接将建议以下安排:
// File "f.h"
template <typename T> void f(T t);
Run Code Online (Sandbox Code Playgroud)
// File "f.cpp"
#include "f.h"
template <typename T> void f(T t) {
// do something
}
template void f<int>(int t);
// other specializations as needed
Run Code Online (Sandbox Code Playgroud)
但是,如果省略尖括号中的类型,似乎专门化也有效,因为我认为编译器从参数类型推导出它:
template void f(int t);
Run Code Online (Sandbox Code Playgroud)
但我想知道,这样做有效吗?
Visual C++ 12(2013)
Jon*_*ely 10
是的,它是有效的.[temp.explicit] p3说:
如果显式实例化一个函数或成员函数,该unqualified- ID的声明应是一个模板id或者,所有模板参数可以推断,一个模板名称或运营商功能-ID.
你的函数有一个模板参数,它可以从函数的参数,当函数参数可以推断int模板参数可以推断为int,这样你就可以(可选)使用模板的名称,f的,而不是模板id f<int>.
| 归档时间: |
|
| 查看次数: |
808 次 |
| 最近记录: |