小编Jul*_*lia的帖子

实现C++ 14 make_integer_sequence

我尝试实现C++ 14别名模板make_integer_sequence,这简化了类模板的创建integer_sequence.

template< class T, T... I> struct integer_sequence
{
    typedef T value_type;
    static constexpr size_t size() noexcept { return sizeof...(I) ; }

};

template< class T, T N>
using make_integer_sequence = integer_sequence< T, 0,1,2, ... ,N-1 >; // only for illustration.
Run Code Online (Sandbox Code Playgroud)

为了实现,make_integer_sequence我们需要一个辅助结构make_helper.

template< class T , class N >
using make_integer_sequence = typename make_helper<T,N>::type;
Run Code Online (Sandbox Code Playgroud)

实施make_helper并不太难.

template< class T, T N, T... I >
struct make_helper
{
   typedef …
Run Code Online (Sandbox Code Playgroud)

c++ gcc c++11 c++14

47
推荐指数
3
解决办法
2万
查看次数

将模板函数传递给没有lambda的变换

我目前有c ++ 11功能:

template<class IteratorIn>
std::string to_string_join(IteratorIn first, IteratorIn last, std::string joiner) {

    std::vector<std::string> ss(last - first);

    std::transform(
        first, last, begin(ss),
        [](typename std::iterator_traits<IteratorIn>::value_type d) {
            return std::to_string(d);
        }
    );

    return boost::algorithm::join(ss, joiner);
}
Run Code Online (Sandbox Code Playgroud)

哪个可以用作:

std::vector<int> is{-1, 2, 62, 4, -86, 23, 8, -0,2};

std::cout << to_string_join(begin(is), end(is), ", ") << std::endl;
Run Code Online (Sandbox Code Playgroud)

要输出:

"-1,2,62,4,-86,23,8,0,2".

我在另一篇SO帖子"convert-vectordouble-to-vectorstring-elegant-way"读到了lambda不是必需的.但是我无法实现删除lambda.

我怀疑它看起来应该类似于:

std::transform(
    first, last, begin(ss),
    std::to_string<typename std::iterator_traits<IteratorIn>::value_type>
);
Run Code Online (Sandbox Code Playgroud)

这导致编译错误:

"错误:预期'('之前'>'令牌".

如何在没有lambda的情况下传递to_string?

c++ lambda templates c++11

3
推荐指数
1
解决办法
384
查看次数

标签 统计

c++ ×2

c++11 ×2

c++14 ×1

gcc ×1

lambda ×1

templates ×1