Cette classe:Comment puis-je avoir un constructeur par défaut optionnel?
template <class T>
struct A {
A() : t(T()) {
}
A(const T& t_) : t(t_) {
}
T t;
};
ne compilera pas si T ne pas constructeur par défaut. Celui-ci :
template <class T>
struct A {
A(const T& t_) : t(t_) {
}
T t;
};
sera pas constructeur par défaut, même si T est constructeur par défaut.
Je veux avoir les deux - S'il n'y a pas de T() je ne veux pas de A().
Je sais que SFINAE doit être utilisé. Et que Boost.traits et Boost.enable_if peuvent aider, mais je n'arrive pas à le faire fonctionner. Quelqu'un peut-il me donner un exemple à ce cas simple?
que voulez-vous un() de faire appel à T si T n'a pas de constructeur par défaut? – Mark
S'il n'y a pas de T() je ne veux pas de A() du tout. –
Je peux me tromper, mais êtes-vous sûr que le premier échoue, * si vous n'essayez pas d'utiliser la version par défaut avec un T qui n'a pas le constructeur par défaut *? GCC et Comeau sont d'accord. Comment instanciez-vous la classe? – UncleBens