現在、テンプレートを持つ型の特定の実装が必要なコードを作成しています。したがって、テンプレート型の型の型を記述しようとしています。定数の値を持つ任意のテンプレート型の型の型
は今のところ、私はこれを持っている:
template<class T>
struct TIsTemplated { enum { Value = 0 }; };
template<template<typename, typename...> class T, typename First, typename... Values>
struct TIsTemplated<T<First, Values...>> { enum { Value = 1 }; };
これは、それは、すぐに一定の値を持つタイプがあるようしかし失敗
template<typename T>
struct X { };
のようなテンプレートの種類に適しています:
template<typename T, int i = 10>
struct Y {};
私は次のようなタイプを作ることができました:
template<int A, template<typename, int> class T, typename First>
struct TIsTemplated<T<First,A>> { enum { Value = 1 }; };
しかし、これは、私がint
を取るタイプを持っていることがわかっている場合にのみ機能します。私はこれを一般化しようとしました:
template<typename C>
template<C A, template<typename, C> class T, typename First>
struct TIsTemplated<T<First,A>> { enum { Value = 1 }; };
これは正しくコンパイルにもかかわらずしかし、TIsTemplated
はまだタイプY
ためfalseです。定数型を知らなくてもこれを達成する方法はありますか?
なぜあなたはこれを行う必要があると思うのですか?これは、「その現在の特性にかかわらず、それぞれの国の南半球で製造されたすべてのレンガを特定する必要がある」と言います。 – Yakk
私はC++から別の言語にいくつかのバインディングを生成しています。ほとんどの型は一般化された実装を使用できますが、テンプレート型は各型の実装が必要です。私は何とかC++コンパイラにこれらのケースでデフォルトの実装を使わないように指示する方法を見つける必要があります。コンテキストの場合、プロジェクトはhttps://github.com/proletariatgames/unreal.hxであり、テンプレートは現在動作していますが、私はそれらをどのように処理してグルーコードガーベッジを少なくすることができるか再考しています – Waneck
なぜ実装が必要なのですか?それぞれのタイプ?テンプレートをバインドする場合、それは1つのことですが、テンプレートによって生成された型をバインドする場合、それは前記テンプレートによって生成されるすべての型をバインドすることを意味するのはなぜですか?テンプレートによって生成される型は実装の詳細です。第二に、包む必要があるテンプレートの有限リストがありますか?与えられたテンプレート(または「テンプレートパターン」)をヘドローンテンプレートパラメータ「種類」で比較的簡単にラップし、型だけを取るようにして、型のみのテンプレート問題を解決することができます。 – Yakk