我想编写自己的容器MyContainer
。它实现了一个emplace方法,以便在容器内就地构造对象。
template<typename T>
MyContainer<T>::emplace(Args ... args)
{
// Some construction code ....
*_cursor = T(args...);
_cursor++;
return *item;
}
虽然我希望始终返回Allocator
类型。但是,如果模板参数T
是std::variant
类型,则会出现问题。我想进行一种SFINAE,选择与std::variant
兼容的重载。
template<typename T>
template<typename Allocator, typename ... Args>
Allocator&
MyContainer<T>::emplace(Args ... args)
{
// Some construction code ....
*_cursor = T(Allocator(args...)); // T is std::variant, Allocator is one variant of T.
T* item = _cursor;
_cursor++;
return std::get<Allocator>(*item); // Here I want to return the correct variant
}
我知道编译器可以根据我是否提供Allocator
模板参数来选择重载。但是我想为我的容器创建一个适用于特定类型的子类型的emplace方法,而不仅仅是std::variant/union类型。所以我不希望得到那种答案。
false_type
,而当有多个参数时是true_type
?在示例中每次只传递了一个参数。 - neshkeev