gpt4 book ai didi

c++ 模板:boost::mpl::transform with template 模板参数

转载 作者:太空狗 更新时间:2023-10-29 21:00:03 25 4
gpt4 key购买 nike

现在我的 previous question有了解决方案,就会出现更多问题。

我想将 wrap_into_container 元函数与 boost::mpl::transform 一起使用,例如:

#include <vector>
#include <list>
#include <boost/fusion/include/vector.hpp>
#include <boost/fusion/mpl.hpp>
#include <boost/mpl/transform.hpp>

namespace container
{
template <typename T> struct vector { typedef std::vector<T> type; };
template <typename T> struct list { typedef std::list<T> type; };
}

template<typename T, template <typename> class Container>
struct wrap_into_container
{
typedef typename Container<T>::type type;
};

int main()
{
namespace fusion = boost::fusion;
namespace mpl = boost::mpl;

typedef fusion::vector<int, float, int> vec_type;
typedef mpl::transform< vec_type, wrap_into_container<mpl::_1, container::vector> >::type wrapped_vec_type;

wrapped_vec_type w;
return w.size();
}

Link to coliru

但似乎我无法将模板模板参数传递给 mpl::transform ...

我该如何解决这个问题?请提供 C++03 解决方案,因为我不能使用 C++11。

最佳答案

boost::mpl 中,高阶函数是通过传递带有内部 apply 模板成员(称为 metafunction class )的固定类型来编写的,而不是通过使用模板模板参数。 Live Example .

#include <vector>
#include <list>
#include <boost/fusion/include/vector.hpp>
#include <boost/fusion/mpl.hpp>
#include <boost/mpl/transform.hpp>
#include <iostream>

namespace container
{
struct vector {
template<typename T> struct apply {
typedef std::vector<T> type;
};
};
struct list {
template <typename T> struct apply {
typedef std::list<T> type;
};
};
}

template<typename T, typename ContainerMaker>
struct wrap_into_container
{
typedef typename ContainerMaker::template apply<T>::type type;
};

int main()
{
namespace fusion = boost::fusion;
namespace mpl = boost::mpl;

typedef fusion::vector<int, float, int> vec_type;
typedef mpl::transform<
vec_type,
wrap_into_container<mpl::_1, container::vector>
>::type wrapped_vec_type;

wrapped_vec_type w;
std::cout << size(w) << "\n";
return size(w);

}

关于c++ 模板:boost::mpl::transform with template 模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23128006/

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