我在 C++ 中有一个模板化的 typedef(我知道它们是不合法的)。
基本上,这样的 typedef 是为了避免在我的代码中写满长类型名(我希望能够写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;
不是一种选择。
知道我的语法不合法,我正在寻找替代解决方案。