gpt4 book ai didi

c++ - 将模板从类特化为整数

转载 作者:行者123 更新时间:2023-11-28 06:06:12 25 4
gpt4 key购买 nike

我正在研究模板特化以了解它们的局限性,我现在尝试不基于类型 进行特化,而是使用整数参数。但是我失败了。

例如,模板 template <class T>应该专门有 T例如一个字符串,但有一个额外的模板参数作为 template <int I> .

标准说了什么,我该怎么做(如果可以)?我的代码如下。

谢谢!

#include <iostream>
#include <typeinfo>
#include <tuple>
#include <string>

template <class T, class... U>
class many
{
public:

T t;

std::tuple<U...> u;
};


template <int size>
class many<int>
{
// ???
};

int main(int argc, char* argv[])
{
many<int, std::string, char> m;

m.t = -1;

std::get<0>(m.u) = "hello";
std::get<1>(m.u) = 'w';

std::cout << "many: " << std::endl;
std::cout << m.t << std::endl;
std::cout << std::get<0>(m.u) << std::endl;
std::cout << std::get<1>(m.u) << std::endl;


return 0;
}

最佳答案

这是一种针对不同的整数值专门化它的方法,它使用了一个你必须进一步专门化的额外类型。这非常简单:

#include <iostream>
#include <memory>
#include <string>
#include <typeinfo>
#include <type_traits>

#include <string>

template <class T, class... U>
struct many
{
T t;
std::tuple<U...> u;
};

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

typedef Int <1> One;
typedef Int <2> Two;

template <>
struct many<int>
{ };

template <>
class many<One>
{ };

template <>
class many<Two>
{ };

int main(int argc, char* argv[])
{
many<int, std::string, char> m;
many<One, char> m2;
m.t = -1;
std::get<0>(m.u) = "hello";
std::get<1>(m.u) = 'w';

std::cout << "many: " << std::endl;
std::cout << m.t << std::endl;
std::cout << std::get<0>(m.u) << std::endl;
std::cout << std::get<1>(m.u) << std::endl;
}

关于c++ - 将模板从类特化为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32376569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com