簡體   English   中英

C++ class 模板采用類型或非類型

[英]C++ class template taking either type or non-type

我看到了一些類似的問題,但他們似乎沒有解決這個問題。

我可以在模板上重載 function:

template <typename T> void foo(); // Called as e.g., foo<int>();
template <std::size_t I> void foo(); // Called as e.g., foo<2>();

有沒有辦法用 class 做類似的事情,我可以有MyClass<int>MyClass<2>

我看不出有什么辦法。 (我的真正目標是擁有一個可調用的static constexpr實例,其行為類似於std::get 。而std::get是在其“索引”參數和參數類型上模板化的,我想制作一個可單獨調用,因此myns::get<2>myns::get<int>都是可調用的,並且在調用時的行為類似於std::get<2>(tup)std::get<int>(tup)分別。

天真地你希望這樣的事情會起作用,但auto是一種類型:

template <auto IndOrType>
constexpr auto get = [](auto&& tup) {
    return std::get<IndOrType>(std::forward<decltype(tup)>(tup));
};

我可以制作一個返回 lambda 的吸氣劑 function,但隨后在myns::get<2>()(tup)myns::get<int>()(tup) ) 中使用()調用它。

您可以使用輔助類型std::integral_constant<int,N>專門化 class 。 雖然不幸的是,這並不完全允許MyClass<2>語法:

#include <type_traits>

template<typename T>
class MyClass
{
};

template<int N>
using ic = std::integral_constant<int,N>;

template<int N>
class MyClass<ic<N>>
{

};

int main()
{
    MyClass<int> a;
    MyClass<ic<2>> b;
}

https://godbolt.org/z/84xoE1Yd4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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