我正在尝试元组并遇到创建元组的问题.代码示例如下.
//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) 在使用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_allocEv是inline仅在标题的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是如何处理这个问题的.它们也只是标题吗?
我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) 注册窗口小部件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) 我很困惑为什么下面涉及的两个函数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)
我正在尝试编写一个包装器make_function,它std::make_pair可以std::function用合适的可调用对象创建一个对象.
就像make_pair对于函数指针一样foo,auto f0 = make_function(foo);创建一个正确类型签名的std::function函数对象f0.只是为了澄清,我不介意偶尔给出类型参数make_function,以防很难(或不可能)从参数中完全推断出类型.
到目前为止我提出的(下面的代码)适用于lambdas,一些函数指针和函子(我没有考虑挥发性).但我无法让它起作用std::bind或std::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) 我正在尝试阅读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) 我试图编译下面的代码(来自/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) 我试图获得一些反应香蕉的经验,根据它的网站,它应该支持GTK.我想知道是否有任何教程/介绍材料如何做到这一点?
我在这里读到有一个jaek项目,但是我更喜欢使用带有gtk2hs(来自hackage的gtk3)的反应性香蕉的最小例子,因为我之前没有FRP或反应香蕉的经验.
此外,我多次尝试在Windows/MinGW上使用reactive-banana-wx.尽管我最终能够安装wxHaskell,但预先存在运行时错误(/sf/ask/1635756531/).我想我无法让wxHaskell正常工作,除非我将所有内容降级到2010或更早,因为之后没有关于如何在Windows上使wxHaskell工作的指令,只有问题.
我今天尝试安装Gtk2Hs.即使使用gtk3,也是一件轻而易举的事.这让我想知道这条路线上是否有适合初学者的好材料(即反应性香蕉+ gtk2Hs).
谢谢,
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)