Анонимный шаблон Typename / объявления класса - PullRequest
8 голосов
/ 16 июля 2011

Мне любопытно, почему допускаются объявления анонимных шаблонов типов / классов, например:

template <typename, class, typename> struct TemplateTest1 { int a; float b ; } ;
TemplateTest1 <int, int, int> tt1 ;

Может кто-нибудь объяснить практическую ценность этих анонимных типов?Влияют ли они на выражение шаблонной структуры?

Ответы [ 2 ]

10 голосов
/ 16 июля 2011

Под анонимным , я полагаю, вы имели в виду неназванный параметр шаблона .

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

Это похоже наспособ, которым разрешена функция с неназванным параметром:

void f(int) //allowed
{
}
3 голосов
/ 16 июля 2011

Программист может выбрать определение типа определенного экземпляра шаблона, который должен использоваться только с этим типом. Один тип может иметь <int,int,bool>, другой тип может <float, bool string>, и программист не хочет, чтобы они были конвертируемыми. Базовая структура такая же, но они не конвертируемые.

Это как:

struct ABC
{ int a,b;};
struct XYZ
{ int a,b;};

Оба типа одинаковы, но ABC не конвертируется в XYZ и наоборот. Многие из дескрипторов Windows объявлены через DECLARE_HANDLE и не конвертируются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...