模板化名称空间和typedef是非法的 - 变通办法?

Fra*_*ank 1 c++ templates typedef namespaces function

我有一个模板化的函数fct,它使用一些基于模板参数的复杂数据结构.它还调用一些独立helpers命名空间中的辅助函数(模板化在同一类型上),并使用相同的复杂数据结构.现在它变得非常难看,因为我们无法typedef为所有函数都可以访问的复杂类型创建一个:

namespace helpers {
  template<class T>
  void h1(const std::vector< std::vector< std::map<T, std::set<T> > > >& bar){
    // ...
  }
}

template<class T>
void fct(const std::vector< std::vector< std::map<T, std::set<T> > > >& bar){
  // ...
  helpers::h1(bar);
}
Run Code Online (Sandbox Code Playgroud)

现在我想通过使用一个所有函数都可以使用的typedef来使它更漂亮.

模板化typedef会很好,但不允许:

template<class T> 
typedef std::vector< std::vector< std::map<T, std::set<T> > > > Bar;
Run Code Online (Sandbox Code Playgroud)

我认为另一个解决方案是将所有这些函数包装在模板中namespace,但在C++中也是不允许的(我听说它将在`C++ 0x'...中).

我们当然有模板化的类,但请注意,我并不是真的希望用户必须构造一个对象并在其上调用成员函数.所以我最终使用的解决方法是使用模板化的类,其中所有成员函数都是static:

template<class T>
class All {

  typedef std::vector< std::vector< std::map<T, std::set<T> > > > Bar;

  static void fct(const Bar& bar){
    // ...
    h1(bar);
  }

private:
  static void h1(const Bar& bar){
    // ...
  }
};
Run Code Online (Sandbox Code Playgroud)

我的问题是:如果我的代码的大部分内容是这样组织的,那可能有点滑稽?毕竟有很多只有静态成员函数的类有点不寻常吗?是否有其他解决方案/解决方法可以使"模板化typedef"/"模板化命名空间"成为可能?

dir*_*tly 8

是否有其他解决方案/解决方法可以使"模板化typedef"/"模板化命名空间"成为可能?

GOTW#79:模板类型定义

新的C++ Typedef模板(参见第1节:问题和当前的解决方法)