Есть ли способ достичь указанного поведения? Если есть какой-то трюк, или это можно сделать, используя черты или enable_if
, пожалуйста, дайте мне знать.C++ template question
template <typename T> struct Functional {
T operator()() const {
T a(5);
// I want this statement to be tranformed into
// plain 'return;' in case T = void
return a; // <---
}
};
int main() {
Functional<int> a;
a();
Functional<void> b;
b(); // <--- Compilation error here
}
Вы можете вернуть 'void' выражение в функцию, возвращающую' void' так что вы все в порядке на данный момент, вы имеете большая проблема с остальной частью вашей функции. 'T a (5)' не будет работать. У вас не может быть переменной типа 'void', поэтому простой' return a; 'не будет работать. Не зная деталей шаблона вашего класса, сложно дать конкретные сведения. –