Как const объявить этот указатель, отправленный в качестве параметра - PullRequest
0 голосов
/ 15 июня 2010

Я хочу const объявить указатель this, полученный в качестве аргумента.

static void Class::func(const OtherClass *otherClass) 
{ 
   // use otherClass pointer to read, but not write to it.
}

Это вызывается так:

void OtherClass::func()
{
  Class::func(this);
}

Это не компилируется nad, если я не могу объявить указатель OtherClass, я могу его изменить.

Спасибо.

Ответы [ 4 ]

2 голосов
/ 15 июня 2010

Вы не можете определять статические функции-члены класса следующим образом:

static void Class::func(const OtherClass *otherClass) 
{ 
   // use otherClass pointer to read, but not write to it.
}

Функция должна быть объявлена ​​статической в ​​объявлении класса, и тогда определение функции выглядит следующим образом:

void Class::func(const OtherClass *otherClass) 
{ 
   // use otherClass pointer to read, but not write to it.
}
1 голос
/ 15 июня 2010

Если вы не измените указатель или объект, на который вы указали, почему бы вместо этого не взять ссылку на const?

void Class::func(const OtherClass& otherClass) 
{ 
   // use otherClass ref for read-only use of OtherClass
}
void OtherClass::func()
{
  Class::func(*this);
}
0 голосов
/ 15 июня 2010

При работе с константой и указателями хитрость заключается в чтении справа налево. Проверьте http://www.parashift.com/c++-faq-lite/const-correctness.html для хорошего обзора.

0 голосов
/ 15 июня 2010

Это нормально компилируется на моей машине:

#include <iostream>

class bar;

class foo {
public:
    static void f(const bar* b) { std::cout << b << '\n'; }
};

class bar {
public:
    void f() {foo::f(this);}
};

int main(void)
{
    bar b;
    b.f();
    return 0;
}

Так что вы сделали по-другому?

...