gpt4 book ai didi

c++ - 在 C++ 中使用具有相同类的多个模板

转载 作者:行者123 更新时间:2023-11-28 04:03:36 24 4
gpt4 key购买 nike

我在 C++ 中有以下代码 -

template <class T>

class TempClass {

T value;

public:
TempClass(T item)
{
value = item;
}

T getValue()
{
return value;
}
};

int main()
{
TempClass<string>* String =
new TempClass<string>("Rin>Sakura");


cout << "Output Values: " << String->getValue()
<< "\n";

class TempClass<int>* integer = new TempClass<int>(9);
cout << "Output Values: " << integer->getValue();
}

我想做的是对上面的类 TempClass 使用多个模板。我知道这样做的一种方法是使用

template <class T1, class T2>

,但如果我这样做,则该类的所有实例都必须有 2 个模板参数。我想做的更像是:

if (flag)
//initialize an instance of TempClass with one template

TempClass<string> s("haha");

else
//initialize an instance of TempClass with 2 templates.

TempClass<string, int> s("haha", 5);

有没有一种方法可以在不使用另一个新类的情况下做到这一点?

最佳答案

您可以使用可变参数模板和 std::tuple保存不同类型的值。最小示例:

template<class... Ts>
class TempClass {
using Tuple = std::tuple<Ts...>;
Tuple values;

public:
TempClass(Ts... items) : values{items...} {}

template<std::size_t index>
std::tuple_element_t<index, Tuple> getValue() const {
return std::get<index>(values);
}
};

int main() {
TempClass<int, std::string, double> tc1{0, "string", 20.19};
std::cout << tc1.getValue<2>(); // Output: 20.19
}

std::tuple_element_t仅自 C++14 起可用。在 C+11 中你应该更详细:typename std::tuple_element<index, Tuple>::type .

关于c++ - 在 C++ 中使用具有相同类的多个模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59123225/

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