Сообщение Проверка класса на конструктор c заданной сигнатурой от 23.08.2017 18:26
Изменено 23.08.2017 21:11 Videoman
Проверка класса на конструктор заданной сигнатурой
Хочется сделать мета-функцию диспетчеризации для проверки наличия у класса специфического конструктора, типа A(B& b).
Использовать предполагается, примерно, так:
Для VS2013 первая перегрузка никогда не разрешается (возможно код вообще не правильный, по стандарту). Обращаюсь к спецам по С++11, помочь и наставить на правильный путь. Интересует именно под VS2013.
template <typename ObjectType, typename Type>
inline auto has_x_constructor() -> decltype(Type(std::declval<ObjectType&>()), std::true_type())
{
return std::true_type();
}
inline std::false_type has_x_constructor(...)
{
return std::false_type();
}
Использовать предполагается, примерно, так:
struct A
{
A(int& a);
};
struct B
{
};
// ...
static_assert(has_x_constructor<int, A>(), "Success!");
static_assert(has_x_constructor<int, B>(), "Fail!");
Для VS2013 первая перегрузка никогда не разрешается (возможно код вообще не правильный, по стандарту). Обращаюсь к спецам по С++11, помочь и наставить на правильный путь. Интересует именно под VS2013.
Проверка класса на конструктор c заданной сигнатурой
Хочется сделать мета-функцию диспетчеризации для проверки наличия у класса специфического конструктора, типа A(B& b).
Использовать предполагается, примерно, так:
Для VS2013 первая перегрузка никогда не разрешается (возможно код вообще не правильный, по стандарту). Обращаюсь к спецам по С++11, помочь и наставить на правильный путь. Интересует именно под VS2013.
template <typename ObjectType, typename Type>
inline auto has_x_constructor() -> decltype(Type(std::declval<ObjectType&>()), std::true_type())
{
return std::true_type();
}
inline std::false_type has_x_constructor(...)
{
return std::false_type();
}
Использовать предполагается, примерно, так:
struct A
{
A(int& a);
};
struct B
{
};
// ...
static_assert(has_x_constructor<int, A>(), "Success!");
static_assert(has_x_constructor<int, B>(), "Fail!");
Для VS2013 первая перегрузка никогда не разрешается (возможно код вообще не правильный, по стандарту). Обращаюсь к спецам по С++11, помочь и наставить на правильный путь. Интересует именно под VS2013.