[英]Convert between template types?
我有一个 class 模板
template <typename T=std::nullptr_t>
class Foo{
Foo(T&){};
};
不幸的是,当T
为void
时,这会失败。 std::nullptr_t
在这里可以达到完全相同的目的,我更希望它是T
。
有没有办法指定所有Foo<void>
应该是Foo<std::nullptr_t>
?
如果您希望Foo<void>
实际上与Foo<std::nullptr_t>
相同,则需要将Foo
设为别名模板:
template <typename T>
class FooImpl {
FooImpl(T&);
};
template <typename T=std::nullptr_t>
using Foo = FooImpl<std::conditional_t<std::is_void_v<T>, std::nullptr_t, T>>;
如果您不想使用别名,您仍然可以使Foo<void>
具有与Foo<std::nullptr_t>
相同的构造函数签名。 尽管如此,它们将是两种不同的类型:
template <typename T=std::nullptr_t>
class Foo{
using reference = std::conditional_t<std::is_void_v<T>, std::nullptr_t, T>&;
Foo(reference);
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.