6 Stimmen

Ist pimpl mit anonymen Namespaces kompatibel?

Ich versuche, die pimpl Muster und definieren die Implementierungsklasse in einem anonymen Namensraum. Ist dies in C++ möglich? Mein gescheiterter Versuch ist unten beschrieben.

Ist es möglich, dies zu beheben, ohne die Implementierung in einen Namespace mit einem Namen (oder den globalen) zu verschieben?

class MyCalculatorImplementation;

class MyCalculator
{
public:
    MyCalculator();
    int CalculateStuff(int);

private:
    MyCalculatorImplementation* pimpl;
};

namespace // If i omit the namespace, everything is OK
{
    class MyCalculatorImplementation
    {
    public:
        int Calculate(int input)
        {
            // Insert some complicated calculation here
        }

    private:
        int state[100];
    };
}

// error C2872: 'MyCalculatorImplementation' : ambiguous symbol
MyCalculator::MyCalculator(): pimpl(new MyCalculatorImplementation)
{
}

int MyCalculator::CalculateStuff(int x)
{
    return pimpl->Calculate(x);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X