使用方法がありますか置換エラーは列挙型のエラー(SFINAE)ではありませんか?その後置換エラーは列挙型のエラー(SFINAE)ではありません
template <typename T>
struct Traits
{
}
template <>
struct Traits<A>
{
};
template <>
struct Traits<B>
{
enum
{
iOption = 1
};
};
template <T>
void Do()
{
// use Traits<T>::iOption
};
、Do<B>();
作品やDo<A>();
が失敗しました。ただし、iOptionが存在しない場合は、デフォルトの動作を提供できます。 DoTo DoOptionの一部を分離します。今
template <typename T, bool bOptionExist>
void DoOption()
{
// can't use Traits<T>::iOption. do some default behavior
};
template <typename T>
void DoOption<T, true>()
{
// use Traits<T>::iOption
};
template <T>
void Do()
{
// 'Do' does not use Traits<T>::iOption. Such codes are delegated to DoOption.
DoOption<T, DoesOptionExist<T> >();
};
、行方不明の作品はDoesOptionExist<T>
ある - iOptionが構造体に存在するかどうかをチェックするための方法。 確かにSFINAEは関数名や関数のシグネチャとして機能しますが、 はenum値として機能します。
私はあなたがそれを削除したときに私の答えを書くのを終えたので、この質問を元に戻したことに注意してください。 :) – Xeo
あなたは正確に何を達成したいですか? –