【问题标题】:C++11 Template Class with Multiple Definitions具有多个定义的 C++11 模板类
【发布时间】:2022-01-03 14:54:27
【问题描述】:

总之,我想要一个模板类,它可以有一个类成员是 std::tuple 或整数类型。

我想做的精华贴在下面。

    #include <tuple>
    #include <vector>
    #include <string>

    template<typename T>
    class DATA 
    {
        public:
        
            T value;
        
    };

    template<typename... T>
    class DATA 
    {
        public:
        
            std::tuple<T...> value;
        
    };

    int main(int argc, char *argv[])
    {               
        DATA<int> d1;
        
        d1.value = 10;
        
        DATA<int, std::string, std::vector<int>> d2;
        
        std::get<0>( d2.value ) = 100;
        std::get<1>( d2.value ) = "Hello World";
        std::get<2>( d2.value ).push_back(1);
        std::get<2>( d2.value ).push_back(2);
        std::get<2>( d2.value ).push_back(3);

        return 0;        
    }

【问题讨论】:

  • 只要总是有元组(也有一个模板参数)并添加一个方法,当sizeof...(T) == 1时返回对该唯一项的引用
  • 当您指定您需要or an integral type 时,您是否需要我们提供代码来检查T 上的此要求?

标签: c++ class templates


【解决方案1】:

C++14 及更新版本:

template <typename T, typename ...P>
struct A
{
    std::conditional_t<sizeof...(P) == 0, T, std::tuple<T, P...>> value;
};

C++11:

template <typename T, typename ...P>
struct A
{
    typename std::conditional<sizeof...(P) == 0, T, std::tuple<T, P...>>::type value;
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    相关资源
    最近更新 更多