2

我希望这里有人对此有解决方法。此代码在 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;
    }

};
4

0 回答 0