元のインスタンス化元のテンプレートを取得するにはどうすればよいですか?タイプがインスタンス化されたテンプレートを取得します
私は、次の操作を実行したいと思います:
struct Baz{};
struct Bar{};
template <typename T>
struct Foo {};
using SomeType = Foo<Bar>;
template <typename T>
using Template = get_template<SomeType>::template type<T>;
static_assert(std::is_same<Foo<Baz>, Template<Baz>>::value, "");
私は部分的な特殊化を介してこれを達成することができます知っているが、これは私がそれを使用するすべてのテンプレートのget_template
を専門とする私を強制的に:
template <typename T>
struct get_template;
template <typename T>
struct get_template<Foo<T>>
{
template <typename X>
using type = Foo<X>;
};
この制限を回避する方法はありますか?
template <typename T>
struct get_template;
template <template <class...> class Y, typename... Args>
struct get_template<Y<Args...>> {
template <typename... Others>
using type = Y<Others...>;
};
を次にテンプレートを取得する:あなたは(タイプ任意の数の引数でテンプレートのために働く必要があります)template template parameterを使用して、そのようなことを行うことができ
親の種類を取得する可能性があります(http://stackoverflow.com/questions/31429363/get-the-type-of-a-parent) –
この例は、あなたがエイリアスを使って"SomeType"は既に "Foo"( 'static_assert(std :: is_same > :: value、" ");')と同じです。実際に 'Foo'部分だけを回復しようとしているのは、別のタイプのインスタンスを生成したいからです。 –
AndyG
@AndyGはい私は最終的に別の型でインスタンス化したいと思っていましたが、私は質問を編集しました –