私はcppソースファイルで静的関数を実装しようとします。 再定義エラーを取得します。 誰かが私を助けることができますか?どうもありがとう!静的メンバー関数テンプレートを実装する際にC++の問題が再定義エラーになる
DEFINE_MY_STATIC_PTR(B_type)
DEFINE_MY_STATIC_PTR(A_type)
- エラー:再定義
struct A_type : B_type
{}
#define DEFINE_MY_STATIC_PTR(TYPE)\
template< typename TYPE > \
My_self_deleting* My_static_ptr<TYPE>::my_self_deleting_ptr(TYPE* ptr) \
{ return ptr; }
template<typename TYPE>
struct My_static_ptr : My_pointer
{
static My_self_deleting* my_self_deleting_ptr (TYPE*);
}
はどのように適切に定義し、この種のを行うには?
すべてのヘルプから、上記のテンプレートを削除する必要があります。使用時には、それぞれのTYPEの実装になります。
#define DEFINE_MY_STATIC_PTR(TYPE)\
My_self_deleting* My_static_ptr<TYPE>::my_self_deleting_ptr(TYPE* ptr) \
{ return ptr; }
DEFINE_MY_STATIC_PTR(B_type)
error: too few template-parameter-lists
このマクロ定義に何かを追加する必要がありますか?
はい、テンプレートを追加<>
#define DEFINE_MY_STATIC_PTR(TYPE)\
template <>
My_self_deleting* My_static_ptr<TYPE>::my_self_deleting_ptr(TYPE* ptr) \
{ return ptr; }
あなたはテンプレートメカニズムを理解していますか? – jopasserat
それでも学ぶ... :-) –
そのマクロの背後にある意図は何ですか?テンプレートを意図どおりに使うのはなぜですか? – PlasmaHH