小编qea*_*tzy的帖子

在函数模板中使用lambda,不能推断类型,makeSet()用例

我想要实现的是一个接受三个参数的makeSet()函数,一对迭代器和一个转换值的函数.

一个用例可以是从一系列值创建一个集合并进行转换,例如,将a转换std::map<K,V>std::set<std::pair<V,K>>.

客户端代码可能看起来像

auto s = makeSet(hash.begin(), hash.end(),
    [](std::pair<int,int> x) { return std::make_pair(x.second, x.first); });
Run Code Online (Sandbox Code Playgroud)

我目前的尝试如下,

// (commented code are some other *failed* attempt).
template <typename Iterator,
        typename T = typename std::iterator_traits<Iterator>::value_type,
        template<typename ... > class Monad, typename R >
        // typename R, typename Monad = std::function<R(T)> >
std::set<R> makeSet(Iterator first, Iterator last, Monad<R,T> f) {
    std::set<R> res;
    for (; first != last; ++first) res.insert(f(*first));
    return res;
}
Run Code Online (Sandbox Code Playgroud)

但遗憾的是不起作用.问题似乎无法推断R.

有没有解决方案或解决方法?如果你能告诉我正确的方法,我将非常感激.

c++ lambda templates c++11 type-deduction

4
推荐指数
1
解决办法
240
查看次数

内置类型的基于C++类型的调度

我需要一个调度程序功能,如下所示

template<typename T>
T dispatcher() {
    // if T is double
    return _func_double();
    // if T is int
    return _func_int();
    // if T is char*
    return _func_char_pointer();
}
Run Code Online (Sandbox Code Playgroud)

并将使用如下

// some code that use above dispatcher
template<typename T1, typename T2, typename T3>
void do_multiple_thing(T1 *a1, T2 *a2, T2 *a3) {
    *a1 = dispatcher<T1>();
    *a2 = dispatcher<T2>();
    *a3 = dispatcher<T3>();
}
Run Code Online (Sandbox Code Playgroud)

你能告诉我怎么做到的吗?

PS
- 内置类型的解决方案才足够.
- 预处理和模板适用都是可以接受的.

c++ templates

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

如何创建 5 个值的数组/切片,所有值都相同

问题

在go编程语言中,如何创建一个长度为5的数组,所有元素都具有相同的值,例如42。

优先顺序

可读性、简洁性、性能。

arrays go

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

windows下的gnuplot:启动时如何指定窗口大小/位置?

在 Windows 10 下,如何通过命令行参数指定 gnuplot 的窗口位置(X,Y)和窗口大小(宽度,高度)?

应用程序的路径是

D:\gnuplot\bin\wgnuplot.exe
Run Code Online (Sandbox Code Playgroud)

如何用它指定窗口位置和大小?就像 cygwin mintty 一样:

D:\cygwin\bin\mintty.exe -i /Cygwin-Terminal.ico 
   -p 372,12 -s 135,50 -o Font=Consolas -o FontHeight=13 -
Run Code Online (Sandbox Code Playgroud)

show version long输出

    Version 5.2 patchlevel 0    last modified 2017-09-01
Compile options:
    +READLINE  -LIBREADLINE  +HISTORY  
    -BACKWARDS_COMPATIBILITY  +UNICODE  +OBJECTS  +STATS +EXTERNAL_FUNCTIONS 
    +LIBCERF  +GD_PNG  +GD_JPEG  +GD_TTF  +GD_GIF  +ANIMATION  
    -USE_CWDRC  +USE_MOUSE  +HIDDEN3D_QUADTREE  
    MAX_PARALLEL_AXES=13
Run Code Online (Sandbox Code Playgroud)

PS
我的意思是 gnuplot 的窗口,而不是它绘制的图形。

windows gnuplot

0
推荐指数
1
解决办法
839
查看次数

标签 统计

c++ ×2

templates ×2

arrays ×1

c++11 ×1

gnuplot ×1

go ×1

lambda ×1

type-deduction ×1

windows ×1