У меня есть сторонний модуль, который предоставляет несколько экземпляров Object.Я хотел бы сделать некоторые дополнительные действия с объектами, однако у меня нет шансов создать производный класс.Вместо этого я создал оболочку, которая получает ссылку и реализует дополнительные вспомогательные функции.(см. класс Helper ниже.)
Есть ли способ избежать передачи параметра T в экземпляр шаблона, то есть использовать Helper(r)
вместо Helper<const Object>(r)
?
#include <iostream>
#include <functional>
using namespace std;
struct Object
{
bool constOp() const { return false; }
bool nonConstOp() { return true; }
};
template <class T>
struct Helper
{
Helper(T &r) : m_ref(r) {}
bool anotherConstOp() const { return m_ref.get().constOp(); }
bool anotherNonConstOp() { return m_ref.get().nonConstOp(); }
private:
reference_wrapper<T> m_ref;
};
int main()
{
{
Object r;
Helper<Object> h(r);
cout << h.anotherConstOp() << endl;
cout << h.anotherNonConstOp() << endl;
}
{
const Object r;
cout << Helper<const Object>(r).anotherConstOp() << endl;
// doesn't compile nonconst - ok
//cout << Helper<const Object>(r).anotherNonConstOp() << endl;
}
return 0;
}