У меня есть шаблонный typedef (вроде как я знаю, что thery не является законным) в C++.C++ - создание шаблонов typedef public и accessibe через файлы include
в основном, такие определения типов предназначены, чтобы избежать написания всего моего кода длинных typenames (я хочу, чтобы иметь возможность написать typeA someVariable;
вместо typename Foo<T,N,P>:: typeA someVariable;
).
Ниже вы найдете код того, чего я пытаюсь достичь.
#ifndef FOO
#define FOO
template <class T, class N, class P>
class Foo
{
public:
typedef T typeA;
Foo();
};
template <class T, class N, class P>
Foo<T, N, P>::Foo(){}
#endif
#ifndef FOOUSER
#define FOOUSER
#include "Foo.h"
template <class T, class N, class P>
typedef typename Foo<T,N,P>::typeA typeA;
template <class T, class N, class P>
typeA fooUser(Foo<T,N,P> foo)
{
typeA typeAInstance;
// some code;
return typeAInstance;
}
#endif
#include <cstdlib>
#include <iostream>
#include "FooUser.h"
using namespace std;
typedef int dummyT1;
typedef int dummyT2;
typedef int dummyT3;
int main(int argc, char *argv[])
{
typeA typeAObject;
Foo<dummyT1, dummyT2, dummyT3> foo=Foo<dummyT1, dummyT2, dummyT3>();
//somecode here
typeAObject=fooUser(foo);
system("PAUSE");
return EXIT_SUCCESS;
}
Так что я объявлял типы в файле fooUser.h, в верхней части, за пределами функции SomeFunction для того, чтобы сделать их общедоступными. проблема, однако, что шаблоны не являются законными в C++. Я использую C++ 98.
Поэтому параметризованные псевдонимы типа (введенные в C++ 11), такие как
template <typename T>
using typeA = typename Foo<T>::TypeA;
не вариант.
зная, что мой синтаксис не является законным, я ищу альтернативное решение.
Хорошо, спасибо, я думаю, это лучший возможный компромисс ... лучше, чем ничего. – geraldCelente