C ++ шаблон метапрограммирования статическая проверка типов
Я не могЯ не могу найти ответ на мою проблему, поэтому я публикую его как вопрос. Я делаю небольшой пример, чтобы объяснить это:
enum STORAGE_TYPE
{
CONTIGUOUS,
NON_CONTIGUOUS
};
template
class Data
{
public:
void a() { return 1; }
};
// partial type specialization
template
class Data
{
public:
void b() { return 0; }
};
// this method should accept any Data including specializations…
template
void func(Data &d)
{
/* How could I determine statically the STORAGE_TYPE? */
#if .. ??
d.a();
#else
d.b();
#endif
}
int main()
{
Data d1;
Data d2;
func(d1);
func(d2);
return 0;
}
Пожалуйста, обратите внимание, что (1) Я не хочу специализацию "FUNC», как это может решить эту проблему, но я просто хочу иметь 1 общий метод "FUNC» с внутренней статикойесли" условия выполнения кода.(2) и я бы предпочел решение со стандартным C ++ (не C ++ 0x или boost).