У меня есть класс, подобный следующему, и я хочу специализировать оператор '->' по шаблону класса T. Специализация должна зависеть от того, является ли тип T типом указателя или нет. Я искал решения, но не нашел их для этой конкретной проблемы.
template <typename T>
class C
{
public:
// when T is a pointer type
T operator->()
{
return value;
}
// when T is not a pointer type
const T* operator->() const
{
return &value;
}
private:
T value;
};
void test()
{
struct Test
{
int x, y;
};
C<Test> c1;
C<Test*> c2;
c1->x = 5; // should both work
c2->x = 5; // ignoring the fact, that c2's value is undefined
}
Спасибо за любую помощь!