1
std :: enable_if引数を持つテンプレートクラスに対して、行外デストラクタ本体を書き込むにはどうすればよいですか?デストラクタの行外定義が有効な場合、if class?
(これは、デコレータを作成し、他のオブジェクトタイプに識別子を追加するために必要です)。
コード:
template<typename T,
typename std::enable_if<std::is_base_of<X,T>::value>::type* = nullptr>
class IdentifiedInstance: public T
{
public:
virtual ~IdentifiedInstance() = 0; // abstract base, still needs a function body
};
ボディの定義:
template<typename T,
typename std::enable_if<std::is_base_of<X,T>::value>::type* = nullptr>
IdentifiedInstance::~IdentifiedInstance()
{
}
IdentifiedInstance::
はIdentifiedInstance<T, ???>::
する必要がありますので、これはコンパイルされません。
ここで2番目のパラメータ値は何ですか。 これを正しく書き込むにはどうすればよいですか?
注意事項(1):
のVisual Studio 2015は、このフォームを受け入れ:
残念ながら、私はニーズを記述したコードは、Linuxの下で構築される(とgccは当然、このフォームにチョークtemplate<typename T,
typename std::enable_if<std::is_base_of<X,T>::value>::type* = nullptr>
class IdentifiedInstance: public T
{
public:
~IdentifiedInstance() = 0
{
}
};
)。
注(2):私はこのオンライン検索を試みましたが、私が見つけたほとんどの回答は、デストラクタのみを部分的に専門化する方法を指していました。