正如标题所说,我想这样做。 我有一个最小的课程:
class Foo
{
public:
/// I only need the type T, but no T instance
/// needed.
template <typename T>
Foo(const std::string&);
Foo(int);
private:
...
};
我需要从这个类创建一个共享指针。琐碎的 方法告诉我们这样做(例如,对于 T=int(:
std::shared_pointer foo_int = std::shared_pointer??("");
或直接:
auto foo_int = std::shared_pointer<Foo>??("");
但是,遵循最佳实践,应该使用make_shared(或make_unique 如果是std::unique_pointer
(:
auto foo_int = std::make_shared<Foo>("");
那么,有可能做到吗?
/// I only need the type T, but no T instance
/// needed.
template <typename T>
Foo(const std::string&);
无法为构造函数显式指定模板参数。它们只能通过演绎或默认模板参数来确定。因此,此构造函数实际上永远无法使用。
一种可能的解决方法是改用标记参数和参数:
template <typename> struct type_tag {};
class Foo
{
public:
template <typename T>
Foo(type_tag<T>, const std::string&);
// ...
};
然后,您可以执行以下操作:
auto foo_int = std::make_shared<Foo>(type_tag<int>{}, "");