2016-06-28 13 views
0

У меня есть класс с параметрами шаблона типа и не-типа (по умолчанию). Параметры не типа могут быть объединены, и может быть реализован следующим образом:Как явно создать экземпляр класса с аргументами шаблона по умолчанию в C++?

TNT<int> v; 
TNT<double, X, Y> v2; 
TNT<float, X | X1, Y1> v3; 
TNT<int, X | X1, Y | Y1, Z | Z1 | Z2, W> v4; 

Класс TNT имеет параметр типа, а остальные по умолчанию. Каков правильный способ явного создания экземпляра такого класса в файле cpp? Поскольку параметры, не относящиеся к типу, могут быть объединены, возможно множество комбинаций.

+0

Я не совсем понимаю. Если они имеют значения по умолчанию, используются значения по умолчанию. Если значения объединены, они больше не являются значениями по умолчанию, не так ли? – Pixelchemist

+0

Например, для первого примера - 'TNT v', используются значения по умолчанию для не-типов. Но для второго примера, для второго и третьего параметра, пользователь передает значения. – Sayan

ответ

5

Я думаю, что вы не получаете это. TNT<int, 5> - совершенно другой тип от TNT<int, 4>. Они отличаются друг от друга как vector<int> от vector<float>.

Таким образом, вы не можете создавать все возможные параметры, отличные от типа. Если вы создаете экземпляр TNT<int>, вы создаете конкретный шаблон , в котором используются параметры по умолчанию. Если ваши параметры по умолчанию были 1, 2, 3, то TNT<int> был бы эквивалентен TNT<int, 1, 2, 3>.

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

1

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

Если это так, то обычные явные правила конкретизация применить с этим синтаксисом:

template class TNT<int>; 
template class TNT<float, 1.0, 2.0>; 
//etc 

Вам нужно будет написать, как многие из них, как комбинации, используемые в других требуют.

+0

Да, ваше предположение верно. Но, как говорит @Nicol Bolas: 'Нет синтаксиса, который будет создавать шаблон для каждой возможной комбинации значений параметров.' – Sayan

+0

Нет, действительно, нет. Как я уже сказал, вам нужно будет явно написать столько, сколько потребуется. – Smeeheey

 Смежные вопросы

  • Нет связанных вопросов^_^