Частично избегать параметра шаблона класса (вывод из аргумента конструктора) - PullRequest
1 голос
/ 06 июля 2011

есть ли способ избежать указания параметра шаблона класса, если тип используется в аргументе конструктора?

У меня есть:

template< typename T, typename X >
class myclass {
  myclass( typename X ) {};
  X myfunct() { return X(); };
};

, так что есть какой-то шаблон проектированиясделать возможным создание экземпляра myclass, используя

myclass< TType > myclass_object( x_object );

вместо

myclass< TType, XType > myclass_object( x_object );

Благодаря вашим специалистам по шаблонному программированию этот материал иногда действительно выводит меня из себя.1014 * Редактировать: добавлена ​​функция с типом возврата X, чтобы прояснить ситуацию.

Ответы [ 3 ]

2 голосов
/ 06 июля 2011

Только если вам не нужно знать второй тип для остальной части вашего класса.

template< typename T >
class myclass {
  template < typename X >
  myclass( typename X ) {};
};

Это работает, потому что второй шаблон является функцией, а для функций компилятор выведет шаблонаргументы из типов обычных аргументов, если это возможно.В этом случае это может.

1 голос
/ 06 июля 2011

Используйте вспомогательную функцию, которая выводит типы аргументов и явно указывает экземпляр классаСм. std::make_pair для примера.

0 голосов
/ 07 июля 2011

Сортировать ответ: нет.myclass<X> и myclass<Y> не могут быть выведены при построении из Z, поскольку Z может преобразовываться в X или Y.

myclass<int> x (123);
myclass<float> x (123);

Вам нужно aвспомогательная функция или полный тип.

template <typename T> myclass<T> make_myclass (const T &);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...