我希望这里有人对此有解决方法。此代码在 gcc 和 VS2010 SP1(Debug x32、Release x32、Debug x64)上编译良好,但对于 64 位 Release 构建失败,并出现致命错误 C1060:编译器堆空间不足。我正在使用 Boost 1.52
#include "stdafx.h"
#include <boost/variant.hpp>
#include <string>
#include <vector>
#include <map>
typedef boost::make_recursive_variant<
boost::blank,
std::string,
int,
double,
std::vector<std::vector<int> >,
std::vector<std::vector<double> >,
std::vector<std::vector<std::string> >,
std::map<std::string, std::vector<std::string> >,
std::map<std::string, std::vector<double> >,
std::map<std::string, std::vector<int> >,
std::map<std::string,boost::recursive_variant_>
>::type InfoHolder2;
class Test
{
InfoHolder2 test;
};
class Test3
{};
class Test4
{};
template <class T>
class Base
{
public:
Base(){};
virtual std::string Foo(const T& val, const std::string& header = "") const = 0;
virtual T Bar(const std::string& buffer, size_t offset = 0) const = 0;
};
template <class Payload, class iArchive, class oArchive>
class TestSer : Base<Payload>
{
public:
TestSer():Base()
{ }
virtual std::string Foo(const Payload& holder,const std::string& header = "") const
{
return "";
}
virtual Payload Bar( const std::string& buffer, size_t offset = 0) const
{
Payload retval;
return retval;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
new TestSer<Test, Test3, Test4>();
return 0;
}
这每次都失败。如果我减少变体可以处理的元素数量,我可以编译它,但这并不是真正的首选,因为这对我来说很好用。如果我将课程更改为以下版本,它可以工作。有没有人对解决方法有任何想法?
template <class Payload, class iArchive, class oArchive>
class TestSer
{
public:
TestSer()
{ }
std::string Foo(const Payload& holder,const std::string& header = "") const
{
return "";
}
Payload Bar( const std::string& buffer, size_t offset = 0) const
{
Payload retval;
return retval;
}
};