gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:37:20 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com