Автоматическое приведение объекта шаблона к указателю шаблона в c ++ - PullRequest
0 голосов
/ 23 января 2012

У меня есть класс URes, который содержит один указатель на <T>, с перегруженными операторами переадресации -> и *, поэтому я могу использовать экземпляр как указатель напрямую.

Однако ятакже хочу иметь возможность передавать мой экземпляр URes функциям, которые обычно принимают указатель внутри экземпляра URes.

Как мне сделать так, чтобы, когда мой объект URes экземпляра передавался вфункция автоматически приводится к указателю, который он содержит?

Ответы [ 2 ]

4 голосов
/ 23 января 2012

Так же, как вы создаете любое исходящее преобразование: путем объявления и определения оператора.

В этом случае вам нужен член operator T*.

Пример :

template <typename T>
struct Foo {
   operator T*() {
      return 0;
   }
};

void bar(int* p) {}

int main() {
   Foo<int> f;
   bar(f);
}

Однако я бы рекомендовал избегать этого и использовать вместо него элемент T* get().Это должен быть явный шаг для вызывающей области, чтобы получить указатель от вашего объекта.

2 голосов
/ 23 января 2012

Вы можете сделать это, предоставив оператор преобразования из этого класса в тип указателя:

class Foo {
public:
    operator int() const { // enables implicit conversion from Foo to int
    }
};

Обратите внимание, что такое неявное преобразование может привести к неожиданному поведению .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...