У меня есть класс с параметром шаблона, и я хочу вызвать его метод. Это выглядит примерно так:
template <typename T>
class Foo {
public:
void doSomething() {
for (auto& t: ts) {
t.doSomething();
}
}
private:
std::vector<T> ts;
};
Это работает, но я хочу сделать doSomething()
const, если T
сам является const (предполагается, что T::doSomething()
тоже будет const). Я нашел возможное решение (на основе этого вопроса), но мне это не нравится.
template <bool enabled = std::is_const<T>::value>
typename std::enable_if<enabled, void>::type
doSomething() const {
for (auto& t: ts) {
t.doSomething();
}
}
template <bool enabled = !std::is_const<T>::value>
typename std::enable_if<enabled, void>::type
doSomething() {
for (auto& t: ts) {
t.doSomething();
}
}
Он отлично работает, но имеет дублирование кода. Есть ли способ избежать этого?