Как реализовать «шаблон переменных» с pre-c ++ 0x (VS2008)?

Я использую Visual Studio 2008 и хочу реализовать функцию форматирования строк без списка аргументов переменных .

Как реализовать «Вариадический шаблон» с pre-c ++ 0x (VS2008)?

Есть ли какая-нибудь библиотека, которая реализует это, например, boost?

Или другой способ реализовать это?

Вот мой пример кода. (конечно, это невозможно выполнить, потому что я использую VS2008.)

bool VarPrint(std::ostringstream& out, const std::string& s) 
{
    std::string::size_type offset = 0;
    if((offset = s.find("%")) != std::string::npos)
    {
        if(!(offset != s.size() - 1 && s[offset + 1] == '%'))
        {
            ASSERT(!"Missing Arguments!");
            return false;
        }
    }
    out << s;
    return true;
}

template<typename T, typename... Args>
bool VarPrint(std::ostringstream& out, const std::string& s, const T& value, const Args&... args) 
{
    std::string::size_type prev_offset = 0;
    std::string::size_type curr_offset = 0;
    while((curr_offset = s.find("%", prev_offset)) != std::string::npos)
    {
        out << s.substr(prev_offset, curr_offset);
            if(!(curr_offset != s.size() - 1 && s[curr_offset + 1] == '%'))
        {
            out << value;
            if(curr_offset + 2 < s.length())
                return VarPrint(out, s.substr(curr_offset + 2), args...);                   return true;
        }

        prev_offset = curr_offset + 2;
        if(prev_offset >= s.length)
            break;
    }
    ASSERT(!"Extra Argument Provided!");
    return false;
}
9
задан Nicol Bolas 7 October 2011 в 06:41
поделиться