例如,我有一個類如何使初始化程序列表隱式轉換爲類?
struct A
{
A(int i, double d) {...}
private:
int m_i;
double m_d;
};
和函數的自變量一
void f(A a);
而且我可以使用初始化列表來調用函數
f(A{1, 3.14});
如何使以下簡單版本也適用?
f({1, 3.14});
例如,我有一個類如何使初始化程序列表隱式轉換爲類?
struct A
{
A(int i, double d) {...}
private:
int m_i;
double m_d;
};
和函數的自變量一
void f(A a);
而且我可以使用初始化列表來調用函數
f(A{1, 3.14});
如何使以下簡單版本也適用?
f({1, 3.14});
的對象的功能符號功能
f(A{1, 3.14});
以前的通話用相同的構造,並且希望f({1, 3.14});
調用其中的一個
有可能與一些元編程
#include <string>
#include <type_traits>
#include <iostream>
struct A{
A(int ,double) {}
};
struct B{
B(int ,double) {}
};
template<class T=A>
void f(T a,
typename std::enable_if<std::is_same<T,A>::value>::type* = 0){
std::cout<<"In f(A a)\n";
}
void f(B b){std::cout<<"In f(B b)\n";}
int main(int argc, char**argv)
{
f({1,2}); //It's not ambiguity anymore and calls f(B a)
f(A{1,2});//call f(A a)
f(B{1,2});//call f(B b)
//f(2); error
}
做'A {...}'沒有使用初始化列表,它是[統一初始化](http://en.wikipedia.org/wiki/C++11#Uniform_initialization)並且是相同的做'A(...)'。 –