Признаки типа C++ для проверки наличия в классе оператора/члена [дубликат]

StackOverflow https://stackoverflow.com/questions/2122319

Вопрос

Возможный дубликат:
Можно ли написать шаблон C++ для проверки существования функции?

Можно ли использовать черты типа повышения или какой-либо другой механизм, чтобы проверить, имеет ли конкретный параметр шаблона оператор/функцию, например. std::vector поскольку параметр шаблона имеет operator[], пока std::pair не.

Это было полезно?

Решение

Вы не можете решить эту проблему с помощью признаков типа, потому что вам придется определять if для каждого возможного имени.

Здесь перечислены общие решения, у которых есть одна проблема:многие реализации STL помещают общий код в базовые классы, и этот метод не проверяет унаследованные имена.

Если вам также необходимо проверить наличие унаследованных членов, см. здесь.Ответ предоставляет решение, которое проверяет, имеет ли рассматриваемый класс член с таким именем, а также может проверять константность и количество аргументов.Однако не удается проверить полную подпись, включая типы аргументов и возвращаемых значений, а видимость членов не имеет значения.Вы сможете частично решить эту проблему, используя ссылку is_call_possible<> (еще не успел посмотреть).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top