Я ищу способ создания экземпляра класса, только если выполняется условие для типа шаблона.Я хотел бы сделать это в классе во время выполнения / и во время компиляции и не завершать программу, а выдавать исключение.
Я работаю над классом, где тип шаблона должен иметь времясоставная часть.В идеале тип является производным от класса, который определяет время только как член.Таким образом, выполнение чего-то подобного должно быть безопасным:
#include <type_traits>
#include <stdexcept>
class Time
{
public:
double t;
};
class A : Time
{
};
template<class T>
class B
{
T data;
void do_someting()
{
data.t = 12.34;
}
};
B<A> some_instance;
Я обнаружил шаблоны C ++, которые принимают только определенные типы
Так что следующая проверка будет выполнять, но static_assert проверяет только во время компиляции.
template<class T>
class B
{
static_assert(std::is_base_of<Time, T>::value, "T must inherit from Time Class");
T data;
void do_someting()
{
data.t = 12.34;
}
};
Было бы безопасно сделать следующее или есть более чистый способ архивирования этого?
Редактировать: Изменено из-за ввода Тимоса.
template<class T>
class B
{
B()
{
if(std::is_base_of<Time, T>::value)
{
throw std::invalid_argument( "T must inherit from Time Class" );
}
}
T data;
void do_someting()
{
data.t = 12.34;
}
};