私の問題に対する答えが見つからなかったので、質問として投稿します。それを説明するために、小さなダミーの例を作成します。
enum STORAGE_TYPE
{
CONTIGUOUS,
NON_CONTIGUOUS
};
template <typename T, STORAGE_TYPE type=CONTIGUOUS>
class Data
{
public:
void a() { return 1; }
};
// partial type specialization
template <typename T>
class Data<T, NON_CONTIGUOUS>
{
public:
void b() { return 0; }
};
// this method should accept any Data including specializations…
template <typename T, STORAGE_TYPE type>
void func(Data<T, type> &d)
{
/* How could I determine statically the STORAGE_TYPE? */
#if .. ??
d.a();
#else
d.b();
#endif
}
int main()
{
Data<int> d1;
Data<int, NON_CONTIGUOUS> d2;
func(d1);
func(d2);
return 0;
}
(1)「func」の特殊化は必要ありませんが、コードを実行するための内部静的「if」条件を持つ1つのジェネリックメソッド「func」が必要なだけです。 (2)そして、標準の C++ (C++0x や boost ではなく) を使用したソリューションを好みます。