我有一个包含两个构造函数的类:
myclass(std::initializer_list<int>);
myclass(std::initializer_list<std::initializer_list<int>);
以下声明有效
myclass obj1 = {{1,2},{3,4},{5,6}}; //a 3x2 matrix
myclass obj2 = {{1,2,3}}; // a 1x3 matrix
但是下面的声明不起作用,当我尝试编译时,它表示它是不明确的
myclass obj3 = {{1},{2},{3}}; //a 3x1 matrix
以下解决了这个问题:
myclass obj3 = {std::initializer_list<int>({1}),
std::initializer_list<int>({2}),
std::initializer_list<int>({3})};
但我觉得这个解决方案难以置信且丑陋。是否有可能做得更好?
答案 0 :(得分:2)
编译器说{{1},{2},{3}}
不明确的原因是{1}
可以是int
或std::initializer_list<int>
。所以你要么有一个int
列表,要么列出一个int
列表,编译器无法确定你真正想要的东西
当您执行{{{1},{2},{3}}}
或{
时,最里面的大括号代表int
,{{2}},tf.unique_with_counts
}int
,下一个最内层代表import tensorflow as tf
X = tf.constant([1, 1, 0, 0, 1, 2, 2, 0, 1, 2])
op = tf.unique_with_counts(X)
sess = tf.InteractiveSession()
res = sess.run(op)
print(res.count)
# [4 3 3]
个列表,然后最外面的大括号代表一个列表那份清单。您需要这些额外的大括号来消除编译器的歧义。