小编eas*_*gel的帖子

变量参数函数,如何使其类型安全且更有意义?

我是C++的新手,我的第一语言是中文,所以我的英语单词可能是无意义的,先说对不起.我知道有一种方法可以编写一个带有可变参数的函数,每个调用的数字或类型可能不同,我们可以使用va_list,va_start和va_end的宏.但众所周知,这是C风格.当我们使用宏时,我们将失去类型安全和自动推理的好处,然后我尝试使用C++模板.我的工作如下:


#include<iostream>
#include<vector>
#include<boost/any.hpp>

struct Argument
{
    typedef boost::bad_any_cast bad_cast;

    template<typename Type>
    Argument& operator,(const Type& v)
    {
        boost::any a(v);
        _args.push_back(a);
        return *this;
    }

    size_t size() const
    {
        return _args.size();
    }

    template<typename Type>
    Type value(size_t n) const
    {
        return boost::any_cast<Type>(_args[n]);
    }

    template<typename Type>
    const Type* piont(size_t n) const
    {
        return boost::any_cast<Type>(&_args[n]);
    }
private:
    std::vector<boost::any> _args;
};

int sum(const Argument& arg)
{
    int sum=0;
    for(size_t s=0; s<arg.size(); ++s)
    {
        sum += arg.value<int>(s);
    }

    return sum;
}

int main()
{
    std::cout << sum((Argument(), …
Run Code Online (Sandbox Code Playgroud)

c++

7
推荐指数
1
解决办法
1886
查看次数

标签 统计

c++ ×1