Я хотел бы определить тип хранилища внутри специализированных специализаций. Но в некоторых случаях у меня нет ничего, чтобы действительно определить, т.е. Для определенных специализаций нет типа хранилища. Конечно, использование типа void не так, но я ищу что-то подобное. Я не уверен, что я направляюсь в правильном направлении - одним из способов может быть просто использование логического типа, поскольку оно занимает наименьшее пространство. Каким был бы правильный/хороший способ преодолеть это. Я не уверен, была ли задана такая проблема. Я не знал, что искать!
template<typename T>
struct Traits
{
}
template<>
struct Traits<TypeA>
{
typedef std::vector<double> storage;
}
template<>
struct Traits<TypeB>
{
typedef std::vector<string> storage;
}
template<>
struct Traits<TypeC>
{
//I do not want to specify a storage type here. More like it does not exist.
//So what is the correct way to define such a type
typedef ??void?? storage;
}
int main()
{
typename Traits<TypeA>::storage myType;
/*
do domething
*/
}
Просто опустите storage
typedef, где это не имеет смысла:
template<>
struct Traits<TypeC>
{
};
Теперь использование Traits<TypeC>::storage
становится ошибкой, потому что оно не называет тип.
Другие примечания:
struct
декларацией/определения.Traits
(а не специализация) не должен иметь тела, если только он не имеет смысла для каждого типа. То есть, это должен быть template <typename> struct Traits;
, Это приведет к его использованию с аргументом шаблона, который не имеет смысла приводить к ошибкам.
Traits<TypeC>::storage
?