[英]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.