小编tin*_*lyx的帖子

无法创建一个带有空元组的一元元组(c ++ 0x)

我正在尝试元组并遇到创建元组的问题.代码示例如下.

//a.cpp
#include <tuple>
using namespace std;

int main() {
  auto te = make_tuple();    //this line is ok
  auto tte = make_tuple(te); //this line gives an error.
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我用g ++ 4.5(g ++ -std = c ++ 0x a.cpp)和MS VC++ 2010编译它.两个编译器都在main()的第二行给出了一个错误.

我的问题是:由于'te'是一个定义明确的变量,为什么不能用te作为内容来创建另一个元组.这个语义是否正确?

我想这是一种边界情况,但如果算法是正确的,那么应该允许零,恕我直言.

仅供参考,来自gcc的错误消息是:

$ gcc -std=c++0x a.cpp

In file included from a.cpp:1:0:
c:\mingw\bin\../lib/gcc/mingw32/4.5.2/include/c++/tuple: In constructor
  'std::tuple<_Elements>::tuple(std::tuple<_UElements ...>&) [with _UElements = {},
  _Elements = {std::tuple<>}]':

c:\mingw\bin\../lib/gcc/mingw32/4.5.2/include/c++/tuple:551:62:   instantiated from
  'std::tuple<typename std::__decay_and_strip<_Elements>::__type ...> 
  std::make_tuple(_Elements&& ...) [with _Elements = {std::tuple<>&}, typename
  std::__decay_and_strip<_Elements>::__type …
Run Code Online (Sandbox Code Playgroud)

c++ tuples c++11

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

如何强制g ++内联函数?

在使用Haskell FFI到C/C++时,我最近遇到了C++内联函数的问题.也就是说,g ++并不真正内联声明的函数inline,并为它们生成符号.最终,当ghci尝试加载调用内联函数的目标文件时,这会生成链接器错误:

Loading object (static) solveeq.o ... done
Loading object (dynamic) /usr/lib/gcc/x86_64-linux-gnu/4.6/libstdc++.so ... done
final link ... ghc: solveeq.o: unknown symbol `_ZN5Eigen8internal19throw_std_bad_allocEv'
Run Code Online (Sandbox Code Playgroud)

这里,_ZN5Eigen8internal19throw_std_bad_allocEvinline仅在标题的Eigen C++库中的函数,以某种方式被视为实函数并给出了链接器符号.solveeq.o是我的目标文件,它对该函数进行(间接)调用.环境是Ubuntu 12.04 64bit,ghc 7.4.1.

问题是这样的:我可以extern "C" 用来阻止C++为我自己的函数装饰函数名.但我不能/不应该更改其他人定义的C++标头(原因很明显).在我看来,编译器不应该首先为此内联定义创建一个函数来导致此错误.原因很简单.如果有问题的函数是真正内联的,我不会得到链接器错误.如果编译器变得聪明并决定为它创建一个真正的函数,我会得到这样的错误(或者我在其他地方读到的同一函数的多个定义).所以现在,编译/链接的正确性取决于编译器的情绪.

此外,我认为像这样的链接器问题实际上会破坏仅限标头的C++库(它们具有吸引力),因为现在无法使用它们进行导出extern "C".

这是c ++的设计问题还是仅仅是一个g ++问题?我的问题是,有没有办法阻止c ++编译器或g ++不内联内联函数?例如,是否有一个命令行选项?(修改源代码是不可能的,因为它们是库代码.)

另外,我很好奇C++ STL是如何处理这个问题的.它们也只是标题吗?

c++ haskell inline ffi ghci

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

如何在Windows 7 64位上使用theano设置cuDnn

Theano在我的机器上安装了框架并启用了CUDA,但是当我在我的python控制台中"导入theano"时,我收到以下消息:

>>> import theano
Using gpu device 0: GeForce GTX 950 (CNMeM is disabled, CuDNN not available)
Run Code Online (Sandbox Code Playgroud)

现在,"CuDNN不可用",我cuDnn从Nvidia网站下载.我还更新了环境中的'path',并在'.theanorc.txt'配置文件中添加了'optimizer_including = cudnn'.

然后,我再次尝试,但失败了,:

>>> import theano
Using gpu device 0: GeForce GTX 950 (CNMeM is disabled, CuDNN not available)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Anaconda2\lib\site-packages\theano\__init__.py", line 111, in <module>
    theano.sandbox.cuda.tests.test_driver.test_nvidia_driver1()
  File "C:\Anaconda2\lib\site-packages\theano\sandbox\cuda\tests\test_driver.py", line 31, in test_nvidia_driver1
    profile=False)
  File "C:\Anaconda2\lib\site-packages\theano\compile\function.py", line 320, in function
    output_keys=output_keys)
  File "C:\Anaconda2\lib\site-packages\theano\compile\pfunc.py", line 479, in pfunc
    output_keys=output_keys) …
Run Code Online (Sandbox Code Playgroud)

python theano cudnn

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

Wordpress:自定义循环,以排除小部件$ args中分配的帖子ID

注册窗口小部件function.php以显示已定义的post_id元:

class featured_widget extends WP_Widget
{
  /**
     * Display front-end contents.
     */
    function widget($args, $instance)
    {
        $post = get_post($instance['post_id']);
...
}
Run Code Online (Sandbox Code Playgroud)

}

我想从我的循环中排除已分配post_id的内容$post:

if (have_posts()) : while (have_posts()) : the_post();
Run Code Online (Sandbox Code Playgroud)

php wordpress

10
推荐指数
2
解决办法
987
查看次数

Haskell中isNothing和(== Nothing)之间的区别?

我很困惑为什么下面涉及的两个函数Nothing是不同的:

coalesce  m1 m2 = if  isNothing m1 then m2 else m1

coalesce' m1 m2 = if  (m1 == Nothing) then m2 else m1
Run Code Online (Sandbox Code Playgroud)

第一个有类型:

?> :t coalesce
coalesce :: Maybe a -> Maybe a -> Maybe a
Run Code Online (Sandbox Code Playgroud)

正如所料.但第二个有:

?> :t coalesce'
coalesce' :: Eq a => Maybe a -> Maybe a -> Maybe a
Run Code Online (Sandbox Code Playgroud)

为什么使用(==Nothing)引入Eq a约束?

(GHC 8.2.2)

haskell maybe

10
推荐指数
2
解决办法
1836
查看次数

c ++ 11:如何编写包装函数来生成`std :: function`对象

我正在尝试编写一个包装器make_function,它std::make_pair可以std::function用合适的可调用对象创建一个对象.

就像make_pair对于函数指针一样foo,auto f0 = make_function(foo);创建一个正确类型签名的std::function函数对象f0.只是为了澄清,我不介意偶尔给出类型参数make_function,以防很难(或不可能)从参数中完全推断出类型.

到目前为止我提出的(下面的代码)适用于lambdas,一些函数指针和函子(我没有考虑挥发性).但我无法让它起作用std::bindstd::bind<R>结果.在下面的代码中

auto f2 = make_function(std::bind(foo,_1,_2,_3)); //not OK
Run Code Online (Sandbox Code Playgroud)

不会编译/工作,使用gcc 4.8.1.我猜测,我没有捕捉到operator()bind正确的结果,但我不知道如何解决它.

任何有关如何解决此案例或改善其他角落案件的帮助表示赞赏.

当然,我的问题是如何修复下面示例中的错误.

对于后台,我可以在这个问题中找到我使用此包装器的一种情况:如何使C++ 11函数采用函数<>参数自动接受lambdas.如果您不批准使用std::function或以我的具体使用方式,请在该帖子中留下您的意见,并在此处讨论技术问题.

---编辑---

从一些评论中,我了解到这是因为模糊性问题(std::bind结果函数调用operator()的模糊性).正如@Mooing Duck的回答所指出的,解决方案是明确地给出参数类型.我已经更新了代码以结合@Mooing Duck的答案中的三个函数(稍微更改了类型参数),这样make_function包装器现在可以像以前一样处理/类型推导明确的情况,并允许指定完整类型签名歧义.

(我的明确案例的原始代码位于:https://stackoverflow.com/a/21665705/683218,可在以下网址进行测试:https://ideone.com/UhAk91):

#include <functional>
#include <utility>
#include <iostream>
#include <functional>
using namespace std;

// For …
Run Code Online (Sandbox Code Playgroud)

c++ c++11 std-function c++14

9
推荐指数
2
解决办法
3427
查看次数

Haskell Data.List.Class和语法

我正在尝试阅读Haskell包Data.List.Class的源代码.(列表0.4.2).但我坚持使用一些语法.

在开头,它写着:

data ListItem l a =
    Nil |
    Cons { headL :: a, tailL :: l a }
Run Code Online (Sandbox Code Playgroud)

我不熟悉第3行的语法.我猜这最后一行相当于Cons a (l a)??.但我不太确定.我注意到文件的标题说:{-# LANGUAGE FlexibleContexts, TypeFamilies #-}.

然后,当我继续时,声明有一种奇怪的用法type: type ItemM l :: * -> *我无法理解.

Data.List.Class
-- | A class for list types. Every list has an underlying monad.
class (MonadPlus l, Monad (ItemM l)) => List l where
    type ItemM l :: * -> *
    runList :: l a -> ItemM l …
Run Code Online (Sandbox Code Playgroud)

syntax haskell typeclass

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

mingw:使用-std = c ++ 11编译时找不到函数

我试图编译下面的代码(来自/sf/answers/33527231/).编译运行正常,如果我编译

$ g++ test.cpp
Run Code Online (Sandbox Code Playgroud)

但在使用-std=c++11开关时出错了:

$ g++ -std=c++11 test.cpp
test.cpp: In function 'std::string exec(char*)':
test.cpp:6:32: error: 'popen' was not declared in this scope
     FILE* pipe = popen(cmd, "r");
                                ^
Run Code Online (Sandbox Code Playgroud)

知道发生了什么事吗?

(我在mingw.org和WindowsXP64上使用mingw32 gcc4.8.1)

码:

#include <string>
#include <iostream>
#include <stdio.h>

std::string exec(char* cmd) {
    FILE* pipe = popen(cmd, "r");
    if (!pipe) return "ERROR";
    char buffer[128];
    std::string result = "";
    while(!feof(pipe)) {
        if(fgets(buffer, 128, pipe) != NULL)
            result += buffer;
    }
    pclose(pipe);
    return result;
}

int main() {}
Run Code Online (Sandbox Code Playgroud)

c++ mingw stdio popen c++11

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

如何使用Gtk2Hs的活性香蕉?

我试图获得一些反应香蕉的经验,根据它的网站,它应该支持GTK.我想知道是否有任何教程/介绍材料如何做到这一点?

在这里读到有一个jaek项目,但是我更喜欢使用带有gtk2hs(来自hackage的gtk3)的反应性香蕉的最小例子,因为我之前没有FRP或反应香蕉的经验.

此外,我多次尝试在Windows/MinGW上使用reactive-banana-wx.尽管我最终能够安装wxHaskell,但预先存在运行时错误(/sf/ask/1635756531/).我想我无法让wxHaskell正常工作,除非我将所有内容降级到2010或更早,因为之后没有关于如何在Windows上使wxHaskell工作的指令,只有问题.

我今天尝试安装Gtk2Hs.即使使用gtk3,也是一件轻而易举的事.这让我想知道这条路线上是否有适合初学者的好材料(即反应性香蕉+ gtk2Hs).

谢谢,

haskell frp reactive-programming reactive-banana

8
推荐指数
0
解决办法
487
查看次数

python有一个列表构造函数吗?

python是否有一个像consOCaml(::)(或lisp)中的列表构造函数,它接受一个head元素和tail列表,并返回一个新列表head::tail

我搜索了python list构造函数,最后找到了其他的东西__init__.参见例如在Python中创建一个列表 - 偷偷摸摸的东西?

为了澄清,我正在寻找的是与此问题中的Python中的以下列表分解相反:

head, *tail = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
Run Code Online (Sandbox Code Playgroud)

这给出了:

>>>head
1
>>> tail
[1, 2, 3, 5, 8, 13, 21, 34, 55]
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个列表构造函数,例如cons或者::这样

head :: tail  =>   original list
Run Code Online (Sandbox Code Playgroud)

python list

8
推荐指数
3
解决办法
7706
查看次数