Yukarıdaki kurucu ile Foo türünde bir nesneyi nasıl başlatılamıyorum?C++ şablonlu kurucu, derleme yapamaz
I ("şablon typedefs" için geçici bir çözüm olarak) bir iç typedef kullanan bir sınıf Bar var ve aşağıda yapıcı (DURUM 1) kullanmak niyetinde. Ancak, derlemek için görünmüyor. Bu yasal C++ mı? ÖRNEK 2, sorunun Bar'daki typedef ile ilgili olduğunu öne sürmektedir.
Ben Bar'da türü ile nesnelerin std :: vektörleri kabul edecek bir kurucusu tanımlamak nasıl?
#include <vector>
#include <iostream>
#include <utility>
template <typename T>
struct Bar
{
typedef std::pair<T, T> type; // or anything else that uses T
};
struct Foo
{
Foo() {}
// CASE 1: doesn't compile
template <typename T> explicit Foo(const std::vector<typename Bar<T>::type>& data)
{
std::cout << "Hello\n";
}
//// CASE 2: compiles, but it's not what I want
//template <typename T> explicit Foo(const std::vector<Bar<T> >& data)
//{
// std::cout << "Hello\n";
//}
};
int main()
{
std::vector<Bar<int>::type> v; // for CASE 1
//std::vector<Bar<int> > v; // for CASE 2
Foo f(v);
return 0;
}
Hata çıktısını gönderir misiniz? 'Foo :: Foo (const Foo &)' : –
VC++ kopya kurucu ile benim yapıcı karıştırır ve yazar 'const Foo &' GCC çıkışları için 'std :: vector <_Ty>' dan parametresini 1 dönüştürmek olamaz: 'Foo :: Foo (std :: vektör> &)' –
kmhofmann
çağrılması için eşleşen işlev yok. Intel C++ Derleyicisi, yapıcı bildirimi ile ilgili olarak aşağıdaki yardımcı yardımı verir: uyarı # 488 : "" T "şablon parametresi, işlev şablonunun parametre türlerini bildirmede kullanılmaz" Foo :: Foo (const std :: vektör :: type, std :: allocator :: type >> &) ' " –