metaprogramming — получает тип метакласса в переполнении стека

Фон

В его предложение а также CppCon talk, Херб Саттер предлагает добавить метаклассы в C ++. Это позволяет пользователям иметь гораздо большую гибкость в плане создания и расширения новых типов во время компиляции. Одним из примеров в предложении является создание interface метакласс или the plain-struct метаклассом.

В текущей реализации C ++ есть три ключевых слова для объявления типов: class, struct, а также enum,

Представьте, что мы создали новый метакласс plain_struct что позволяет нам писать код как

plain_struct User {
string name;
string surname;
};

И позже у нас может быть функция или метод класса, который принимает параметр шаблона, такой как

template <typename T>
void printUser(T user) {
cout << user.name << " " << user.surname << endl;
}
/*
...
*/
User u("N", "S");
printUser(u);

Вопрос

Есть ли способ перегрузить эту функцию или как-то обнаружить во время выполнения, если объект передан в функцию printUser имеет метакласс struct/class или определенный пользователем plain_struct,

Например, возможно ли иметь что-то подобное (следующий код больше похож на псевдокод, а не на реально работающий)?

template <class T>
void printUser(T user) {
cout << "User is of metaclass class";
}
template <plain_struct T>
void printUser(T user) {
cout << "User is of metaclass plain_struct";
}
/*
...
*/
User u("N", "S");
printUser(u);  // prints "User is of metaclass plain_struct"

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]