У меня есть функция const в C++, откуда я вызываю функцию C.Альтернатива ключевому слову, изменяемому для переменных-члена в C++
class ClassEx
{
A* pPointer // declaration of the pointer
};
void
ClassEx::ClassFunction() const
{
int error = AFunctionInExternLib(&pPointer); //pPointer will be instantiated by this function.
}
//Signature of AFunctionInExternLib
Struct A
{
};
AFunctionInExternLib(A** pPointer);
Теперь у меня есть переменная-член для classEx тип структура А. Поскольку класс :: ClassFunction() является константной я не могу передать pPointer как это. поэтому я сделал заявление, как
class ClassEx
{
mutable A* pPointer // declaration of the pointer
};
Это компилируется нормально, но мне было интересно, есть ли другой способ достичь этой цели без использования изменяемый ключевого слова?
Пожалуйста, обратите внимание, я попробовал это также,
void
ClassEx::ClassFunction() const
{
A* pAnotherPointer = const_cast<A*>(pPointer);// remove constness
int error = AFunctionInExternLib(&pAnotherPointer);
}
Но это было бы создать экземпляр pAnotherPointer и не pPointer. Есть ли способ передать адрес pAnotherPointer для pPointer?
Есть ли проблемы в этом подходе.
class ClassEx
{
A* pPointer // declaration of the pointer
};
void
ClassEx::ClassFunction() const
{
ClassEx* pTempPointer = const_cast<ClassEx*>(this);
int error = AFunctionInExternLib(&pTempPointer->pPointer);
}
Сделать 'ClassEx :: ClassFunction' не-'const'? Хотя я не вижу, как «pPointer» будет изменен внешней функцией, поскольку вы передаете ее по значению. – juanchopanza
О, позвольте мне изменить это. – Yogi
ClassEx :: ClassFunction, это не может быть выполнено неконстантно. – Yogi