Это, вероятно, только проблема синтаксиса.
Итак, у меня есть этот класс шаблона:
template <typename String, template<class> class Allocator>
class basic_data_object
{
template<typename T>
using array_container = std::vector<T, Allocator<T>>;
};
И еще один:
template <typename String, template<class> class Allocator, typename T>
struct get_data_object_value
{
};
Теперь я хочу специализировать второй параметр T
с первым внутренним typedef array_container
для любого заданного типа.
template <typename String, template<class> class Allocator, typename T>
struct get_data_object_value
<String, Allocator,
typename basic_data_object<String, Allocator>::template array_container<T>>
{
};
Но эта специализация, похоже, не сопоставляется, когда я передаю std::vector в качестве последнего параметра.
Если я создаю временный жесткий код typedef:
typedef basic_data_object<std::string, std::allocator<std::string>> data_object;
И используйте его для специализации, все работает:
template <typename String, template<class> class Allocator, typename T>
struct get_data_object_value
<String, Allocator,
data_object::template array_container<T>>
{
};
Чего я пропустил?:)
Альтернативно, какой лучший (самый маленький/самый чистый) способ сделать эту работу?