有没有方法分辨默认构造和={}的构造方法?
之前写variant的时候遇到一个问题,variant要同时支持list和整形。在初始化时,可以这样写variant v1=123; //整形variant v2={123};//list类型
因为variant的构造函数,对于int是模板特化的,而对于initializer_list是非模板化的。
编译器会优先调用非模板化的函数,因此能正确分辨。
但是对于variant v1;
variant v2={};
有什么方法能正确分辨这两种初始化方式么。? variant v1;
variant v2={};
对于这两行代码,都调用默认构造函数不行吗?
你为什么要分辨这两行
人造人 发表于 2020-1-16 14:55
对于这两行代码,都调用默认构造函数不行吗?
你为什么要分辨这两行
做variant啊,我希望一个能识别成列表另一个能识别成空值。 https://fishc.com.cn/thread-154012-1-2.html 在C++中大概是不行,我也找不到分辨这两行的办法
不过站在python的角度来看(也许是python的角度吧)
下面这样不行吗?
variant v1("{}");
variant v2={"{}"};
variant v3("[]");
variant v3("()");
在构造函数内部解析字符串,然后创建对应的类型
^_^ 两种实现我都写了的,只是初始化列表的这种方法就这里有点瑕疵,我也没找出来方法完善。。。想看看有没有人有什么好的办法。。 既然要解析字符串,那解析一个空括号和解析一个非空元组也没什么区别吧
variant v1(R"((123, "abcd", True, {"x", "y"}, ))");
我的意思是,只有一个接受字符串的构造函数,在这个构造函数内部解析字符串,然后创建对应的类型
如果你非要在C++中玩py,因为本来就不是同一个语言,语法肯定不同
在一个语言中找另一个语言的语法替代品,有时候真的找不到
variant v1("(123, \"abcd\", True, {\"x\", \"y\"}, )"); 反斜杠怎么没了,再试一次
variantv1("(123, \"abcd\", True, {\"x\", \"y\"}, )");
我的意思是,只有一个接受字符串的构造函数,在这个构造函数内部解析字符串,然后创建对应的类型
如果你非要在C++中玩py,因为本来就不是同一个语言,语法肯定不同
在一个语言中找另一个语言的语法替代品,有时候真的找不到
你说的这个我已经写好了,虽然现在只支持list。tuple,set和dict还没实现。。。
你的意思不会是让我把其他的构造方式干掉吧。。。
初始化列表版的很符合c++的风格,而且还能传递变量,字符串版本的你想传递一个变量得有多难写。。。
我又不是想写个python,为什么要把传统的构造方式推倒啊- - Croper 发表于 2020-1-16 19:46
你说的这个我已经写好了,虽然现在只支持list。tuple,set和dict还没实现。。。
你的意思不会是让我 ...
就是字符串版本的通用,因为编译器不对其进行解析,把解析的任务交给了你,这给了你很大的灵活性(好像有点太大了,^_^)
字符串处理么,也没有多难,简单点的用正则表达式就可以了,复杂点的可以用flex和bison么
不难,^_^
在C++中好像没办法识别这两种构造函数,至少在我的所学范围内没办法
那就再加一个字符串版本的,用来解析空的括号?
页:
[1]