У меня есть шаблонный класс, Foo:
template <class A, class B>
class Foo
{
public:
Foo(A &aInstance);
private:
Attr<Foo> _attr;
};
Затем у меня есть другой шаблонный класс, называемый Attr, который является атрибутом моего класса Foo и который принимает в качестве параметра шаблона сам класс Foo.
template <class C>
class Attr
{
class SomeType
{
SomeType();
~SomeType();
};
Attr(const SomeType* st);
~Attr();
private:
Attr();
}
Я хочу инициализировать _attr (типа Attr) в конструкторе, приведя первый параметр из шаблона как SomeType.
Реализация конструктора Foo:
template<class A, class B>
Foo<A, B>::Foo(A &aInstance):
_attr(
(Attr<Foo<A, B> >::SomeType *) aInstance)
{
}
Это не скомпилируется:
ошибка: ожидаемое первичное выражение до маркера ')'
Эта ошибка относится к строке приведения в реализации конструктора Foo, как если бы SomeType не был распознан.
Теперь у меня есть экземпляр, но все еще появляется та же ошибка.