c++ - 模板化 namespace 和 typedef 是非法的——解决方法?

标签 c++ function templates namespaces typedef

我有一个模板化函数 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);
}

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

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

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

我认为,另一种解决方案是将所有这些函数包装在一个模板化的 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){
    // ...
  }
};

我的问题是:如果我的大部分代码都是这样组织的,那可能有点好笑?毕竟拥有许多只有静态成员函数的类是不是有点不寻常?是否有其他解决方案/解决方法可以使“模板化类型定义”/“模板化命名空间”成为可能?

最佳答案

Are there other solutions/workaround that make the "templated typedef" / "templated namespace" possible?

GOTW #79: Template Typedef

The New C++ Typedef Templates (请参阅第 1 部分:问题和当前的解决方法)

关于c++ - 模板化 namespace 和 typedef 是非法的——解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/753564/

相关文章:

c++ - 将鼠标坐标转换为世界空间坐标

c++ - 使用 axis2c 开发 Web 服务时如何访问轴骨架代码中的服务参数?

c++ - 需要遍历整个对象,除了前两个元素。有设计模式吗?

C++11 正则表达式和字符串 u8 前缀

django - 模板django中的随机字符串

c++ - 是否允许多个非类型模板参数包?

c - 尝试读取文本文件时遇到错误

C 程序返回错误结果

c - 如何在函数内调用函数

如果可能,C++ 通过右值引用传递参数,否则复制左值引用