Подтвердить что ты не робот

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

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

Надуманный пример:

struct A {
   template<typename T>
   A() {}
};

Есть ли способ создать экземпляр этого класса? Каков синтаксис для явного указания параметров шаблона конструктора?

Мой случай использования был бы проблемой, так как компилятор не нашел правильный шаблонный конструктор. Явное указание параметров шаблона, вероятно, создаст более полезные сообщения об ошибках или даже устранит проблему.

4b9b3361

Ответ 1

Нет. В стандарте С++ 03 говорится:

[Примечание: поскольку список аргументов явного шаблона следует за именем шаблона функции и поскольку шаблоны функций членов-членов преобразования и шаблоны-функции-члены-конструкторы вызываются без использования имени функции, нет способа предоставить явный список аргументов шаблона для этих шаблонов функций.] (§14.5.2/5)

Ответ 2

Существует другое решение для передачи информации типа в шаблонные конструкторы, которые не могут принимать значение этого типа в качестве аргумента:

template<class T>
struct id
{};

struct A {
  template<class T>
  A(id<T>);
};

A a=id<int>();

Edit:

Обратите внимание: A a(id<int>()); не будет работать из-за самого неприятного разбора. Он будет интерпретироваться как объявление функции. Подробнее см. этот вопрос.

Ответ 3

нет, вы не можете создать экземпляр этого класса с помощью этого конструктора. НО:



struct A
{
  template < typename T >
  A(T const&);
};

Теперь вы можете.