Quero ter um template com parâmetros typename T e um objeto do tipo T que represente um null_object. O objetivo é criar uma classe contêiner na qual, para cada tipo, um determinado null_value seja fornecido para o construtor vazio. Por exemplo
template<typename T, T null_value>
class MyObject {
private:
std::array<T,4> data;
public:
MyObject() {
data.fill(null_value);
}
};
No entanto, não posso fazer isso com a sintaxe fornecida acima. Como posso fazer isso? Se isso não for possível com modelos aninhados, existe uma maneira de definir construtores distintos para alguns valores de modelo específicos? Por exemplo
template<typename T>
class MyObject {
private:
std::array<T,4> data;
public:
MyObject<int>() {
data.fill(0);
}
MyObject<float>() {
data.fill(0.0f);
}
MyObject<char>() {
data.fill('a');
}
};
EDIT: Para alguns tipos como int
, o primeiro pedaço de código será compilado. No entanto, para tipos como float
, o pedaço não será compilado.
Se a pergunta for 'como escolher um valor de preenchimento com base no tipo', sugiro que você:
Ou então obtenha o valor de um modelo secundário: