gpt4 book ai didi

c++ - 具有与实例一样多的参数的可变参数模板

转载 作者:太空狗 更新时间:2023-10-29 20:20:25 24 4
gpt4 key购买 nike

我想创建一个模板类,它采用与它在程序中被调用的次数一样多的参数。它的用法应该如下:

template<typename... Ts>
class A
{
std::variant<Ts> v;
};

如果在程序的其余部分我会实例化

A<int> a;
A<double> b;

然后我想如果编译器可以实例化一个这样的类:

class A
{
std::variant<int, double> v;
};

相反,如果在另一个程序中我会实例化:

A<std::vector<int>> c;
A<std::list<float>> d;
A<char> e;

然后编译器可以实例化:

class A
{
std::variant<std::vector<int>, std::list<float>, char> v;
};

问题的核心是我懒得每次使用不同类型时更改 A 的类型参数。所以我想如果编译器可以计算 A 的所有用法并创建它们的适当“union ”。我觉得用“概念”是可以的,但同时有没有可行的方案呢?

最佳答案

你想要的是不可能的。单个翻译单元不可能知道整个程序如何实例化模板。一个翻译单元中的代码不会意外影响另一个翻译单元中的代码的编译。

事实上,由于代码的动态加载,即使是链接程序也不可能知道整个程序发生了什么,因为整个程序对编译过程不可见。

只是习惯于使该数据结构与您的代码保持同步。事实上,您可以检测到的东西:当您用特定类型实例化 A 时,您可以检查相应的 variant 以查看给定的是否类型在该类型列表中。如果不是,您可以发出编译错误。

或者重新评估您的设计,这样就不需要这种“全变体”了。或者只要适合您的用例,就使用 any

I think that it'll be possible with "concepts"

不,不会。

关于c++ - 具有与实例一样多的参数的可变参数模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51465528/

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