小编Luk*_*ell的帖子

为什么std :: bind静态类型检查参数传递给函数?

这不是一个问题,而是一个沉思......我写了一个程序来测试'std :: bind'如何将参数传递给被绑定的函数.在这种情况下,C++编译器似乎执行静态类型检查:

#include <iostream>
#include <functional>

void take_int(const int *a)
{
    if (a)
    {
        std::cout << "a is " << *a << std::endl;
    }
    else
    {
        std::cout << "null" << std::endl;
    }
}

int main()
{
    int *a = new(int);
    *a = 4;
    take_int(NULL); //prints 'null'
    auto fn = std::bind(take_int, NULL); //fails to compile
    fn();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

似乎不一致的是能够直接用NULL调用该函数,但是在编译时它通过std :: bind失败了.

我猜std :: bind正在使用更现代的C++功能选择强制执行此操作?

c++ stdbind

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

关于LYAH实施的问题

我一直在努力学习哈斯克尔的书,学习自己一个哈克尔.本书涵盖take了以下方式的实现:

take' :: (Num i, Ord i) => i -> [a] -> [a]  
take' n _  
    | n <= 0   = []  
take' _ []     = []  
take' n (x:xs) = x : take' (n-1) xs  
Run Code Online (Sandbox Code Playgroud)

我对这段代码有两个问题:

  1. 在函数声明中我们为什么要使用相同的字母i来声明(Num i, Ord i)?这难道不是覆盖的事实,i是类型Numi类型是Ord

  2. 我想修改,take'以便如果n大于列表的长度,则打印出一条消息.我试图通过使用定义中的函数长度来实现这个'但是然后函数无法加载:

    拿'n _

        | n > length _ = print "n greater than length of list"
    
    Run Code Online (Sandbox Code Playgroud)

haskell

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

标签 统计

c++ ×1

haskell ×1

stdbind ×1