這個問題建立了我的:C++ 11:模板類方法內聯聲明的任何更簡單的方法?
C++ library: .hpp + .inl (separate definitions and declarations) vs .hpp only (in-class body code)
移動模板的功能集成到嵌入式文件肯定是一個正式的地獄。請看下面的三個例子。從我老練的方式(#0),到真正擴展的方式(#1),到更緊湊的方式(#2)到想象中的夢想管道(#3)。
// #0 the actual class definition
namespace CA {
template <typename tnChar>
class MyClass {
public:
typedef tnChar tChar;
typedef std::basic_string<tChar> tString;
MyClass(); // {}
tString Method1(const tString& aParam) const; // { return aParam; }
};
};
這是內聯版本#1。它有名稱空間和類。
template <typename tnChar>
CA::MyClass<tnChar>::MyClass(){}
template <typename tnChar>
typename CA::MyClass<tnChar>::tString
CA::MyClass<tnChar>::Method1(const tString& aParam) const {
return aParam;
}
template <> // specializing
typename CA::MyClass<wchar_t>::tString
CA::MyClass<wchar_t>::Method1(const tString& aParam) const {
return aParam;
}
這是內聯版本#2。它被封裝在命名空間中。從添加CA::
保存。
namespace CA {
template <typename tnChar>
MyClass<tnChar>::MyClass(){}
template <typename tnChar>
typename MyClass<tnChar>::tString
MyClass<tnChar>::Method1(const tString& aParam) const {
return aParam;
}
template <> // specializing
typename MyClass<wchar_t>::tString
MyClass<wchar_t>::Method1(const tString& aParam) const {
return aParam;
}
}
這是內聯#3型。它被包裝在命名空間和類中。從添加template <...>
... CA::MyClass
保存。 IMAGINARY版本。不可能但希望!
#if 0 // like this is ever gonna work
// inline version #3 (IMAGINARY)
// wrapped in namespace and in class
// 'inline class' should make this functionality happen in C++my
namespace CA {
template <typename tnChar>
inline class MyClass { // :)
MyClass(){}
tString Method1(const tString& aParam) const {
return aParam;
}
};
template <>
inline class MyClass<wchar_t> { // :) - too much imagination
tString Method1(const tString& aParam) const {
return aParam;
}
};
}
#endif // disabled
我的問題是:就好像是第3版,甚至任何遠程可能嗎?無需typename
返回值並每次寫入template <...>
。我知道我們需要這樣做的原因,但我想知道新的C++11
或下一個C++14
是否有任何計劃地址模板類內聯方法分組?
具有inline class
關鍵字觸發#3的假想功能將是令人興奮的,它將使外部化模板類的方法很容易...和邏輯......並分組...和短:)
'auto'關鍵字會這樣做嗎?我*想*我已經看到'auto'返回類型,但我可能會誤解。 – Suedocode
@Aggieboy MSVC在追趕東西方面很慢...'auto'返回...還沒有!不要認爲這適用於此。 – CodeAngry
@Aggieboy一個有趣的提示,尾隨返回類型確實在該類的範圍內。 – dyp