#include <iostream>
struct X2
{
int i;
int j;
char buf[10];
};
X2 glob{1,2,"abc"}; // OK
struct X
{
X2 x2;
template<typename... Args>
X(Args&&... args): x2{args...} {}
};
int main()
{
X x; // OK
X y{1, 2}; // OK
X z{1, 2, "abc"}; // error
}
son satırı verir hata: 17 : error: invalid conversion from 'const char*' to 'char' [-fpermissive]
Mükemmel yönlendirme başarısız
Ben std::forward(args)...
yerine args...
kullanımı o zaman bile daha fazla hata gelip; ve ayrıca dize değişmezi yerine {'a', 'b', 'c', '\0'}
başlatıcı olarak kullanmaya çalışırsam hatalar vardır.
bu işi yapmak için bir yol var mı, yani x2
için yasal başlatıcı olacağını parantez içindeki her şeyi, kabul edilir ve x2
başlatmak aslında yok X z{......};
izin?
"* bu işi yapmak için bir yol var mı", * yapıcısı kaldırabilir veya –
yazma ' 'a', 'b' buf'' türü olarak 'std :: string' kullanın' c ',' \ 0 'yerine "abc", C++ 17 –