Совместим ли pimpl с анонимными пространствами имен?

Я пытаюсь использовать шаблон pimpl и определять класс реализации в анонимном пространстве имен. Возможно ли это в C ++? Моя неудачная попытка описана ниже.

Можно ли исправить это, не перемещая реализацию в пространство имен с именем (или глобальным)?

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);
}
5
задан anatolyg 21 April 2011 в 14:38
поделиться