簡體   English   中英

在模板類型之間轉換?

[英]Convert between template types?

我有一個 class 模板

template <typename T=std::nullptr_t>
class Foo{

Foo(T&){};

};

不幸的是,當Tvoid時,這會失敗。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM