2015-08-11 2 views
4

Как создать шаблон, который сообщает, является ли аргумент структурой или нет? То есть как сделать следующий код, выполняемый без ошибок:Сообщите, является ли аргумент шаблона структурой

struct X { int a; } 
static assert(isStruct!X); 
static assert(!isStruct!int); 
+0

Если вам необходимо провести различие между базовым типом и классом, структуры можно использовать std.traits. http://dlang.org/phobos/std_traits.html#isAggregateType – Kozzi11

+0

Спасибо, мне интересно различать структуры. Есть вещи для классов в чертах, но не для структур, и это путано. Вот почему я забыл «есть», это не в модуле признаков. – Tamas

ответ

8

Используйте is выражение.

struct X { int a; } 
static assert(is(X == struct)); 
static assert(!is(int == struct)); 

Но если вы действительно хотите шаблон:

template isStruct(T) 
{ 
    enum bool isStruct = is(T == struct); 
} 
Смежные вопросы