我想创建一个模板类,它接受的参数与在程序中调用的次数一样多. 其用法应如下: templatetypename... Tsclass A{ std::variantTs v;}; 如果在程序的其余部分我将实例化 Aint a;Adouble b; 然后我想如果
其用法应如下:
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的所有用法并创建它们的适当“联合”.
我认为“概念”是可能的,但同时有可行的解决方案吗?
实际上,由于动态加载代码,即使链接程序也不可能知道整个程序中发生了什么,因为整个程序对编译过程是不可见的.
只是习惯于保持数据结构与代码同步.实际上,您可以检测到这一点:当您使用特定类型实例化A时,您可以检查相应的变量以查看给定类型是否在该类型列表中.如果不是,则可以发出编译错误.
或者重新评估您的设计,以便不需要这种“全方位变体”.或者只使用任何适合您的用例的任何内容.
I think that it’ll be possible with “concepts”
不,它不会.