Конструктор шаблонов в шаблоне класса - как явно указать аргумент шаблона для второго параметра?
скомпилировать ошибку при попытке явного указания аргумента шаблона для конструктора 2. Как это сделать, если я действительно хочу явный конструктор вызовов 2?
Обратите внимание, что это та же самая ситуация для boost:: shared_ptr, когда вы хотите явно указать тип удаления.
N.B. Для функции non -construction foo() явно указывается, что работает нормально.
N.B Я знаю, что он отлично работает без указывает 2-й явным образом для конструктора 2 как вывод аргумента шаблона, как правило, просто отлично работает, мне просто интересно, как его явно указывать.
template<class T> class TestTemplate {
public:
//constructor 1
template<class Y> TestTemplate(T * p) {
cout << "c1" << endl;
}
//constructor 2
template<class Y, class D> TestTemplate(Y * p, D d) {
cout << "c2" << endl;
}
template<class T, class B>
void foo(T a, B b) {
cout << "foo" << endl;
}
};
int main() {
TestTemplate<int> tp(new int());//this one works ok call constructor 1
//explicit template argument works ok
tp.foo<int*, string>(new int(), "hello");
TestTemplate<int> tp2(new int(),2);//this one works ok call constructor 2
//compile error when tried to explicit specify template argument for constructor 2
//How should I do it if I really want to explicit call constructor 2?
//TestTemplate<int*, int> tp3(new int(), 2); //wrong
//TestTemplate<int*> tp3<int*,int>(new int(), 2); //wrong again
return 0;
}