Можно ли вызвать конструктор с аргументами шаблона, если класс тоже является шаблоном?
#include <stdio.h>
#include <iostream>
template <class A>
struct Class
{
template <class B>
Class(B arg) { std::cout << arg << std::endl; }
};
int main()
{
Class<int> c<float>(1.0f);
Class<int>* ptr = new Class<int><float>(2.0f);
return 0;
}
edit: так что я думаю, что единственный способ вызвать конкретный конструктор шаблона - это вызвать его с приведенными параметрами для нужного типа шаблона:
#include <stdio.h>
#include <iostream>
template <class A>
struct Class
{
template <class B>
Class(B arg) { std::cout << arg << std::endl; }
Class(double arg) { std::cout << "double" << std::endl; }
Class(float arg) { std::cout << "float" << std::endl; }
};
int main()
{
Class<int> c(1.0f);
Class<int>* ptr = new Class<int>((double)2.0f);
return 0;
}
// это выводит:
поплавок
двойной
edit2: но что происходит с аргументами шаблона конструктора, которые не являются частью самого аргумента конструктора?
template <class B, class C>
Class(B arg) { /* how do you specify ?? C */ }