我有一个模板化函数 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?
The New C++ Typedef Templates (请参阅第 1 部分:问题和当前的解决方法)
关于c++ - 模板化 namespace 和 typedef 是非法的——解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/753564/