テンプレートクラスのメンバーの定義の方法
はじめまして、C++メタプログラミングを最近学び始めたものです。
テンプレートクラスのメンバーの定義の方法(または、フォーマット)についての質問です。
より具体的には、以下のコードの * (1) * の部分、template<>、が必要かまたはあれば意味が変わるのかということについてです。template<>があってもなくてもコンパイラからエラーが出ないので混乱してしまいました。とても基本的な質問かもしれませんがよろしくお願いします。
template<typename T_Self>
class FrameClass {
public:
bool frameFunc(const T_Self& org, const T_Self& cmp) const override;
};
class TestClass {
public:
using Self = TestClass;
private:
bool testfunc(const Self& cmp) const;
int a = 1;
};
template<>
class FrameClass<TestClass> {
public:
using Type = TestClass;
bool frameFunc(const Type& org, const Type& cmp) const override;
};
template<> // *** (1) ***
bool FrameClass<TestClass>::frameFunc(const Type& org, const Type& cmp) const {
bool diff_flg=false;
if ( ( diff_flg = org.testfunc(cmp) ) ) {
return diff_flg;
}
return diff_flg;
}