根据我对C++的理解,下面的代码是错误的.
#include <iostream>
class Test {
private:
int num_;
public:
Test(int n) : num_(n) {}
void printNum() { std::cout << num_ << '\n'; }
void weird() { Test::printNum(); }
};
int main() {
Test t(10);
t.weird();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Test::weird()调用,Test::printNum()因为它将是一个静态成员函数.但是,Test::printNum()访问实例属性并且显然不是静态的.然而,代码编译并运行到输出10.
我的编译器是Apple LLVM版本7.0.0(clang-700.1.76)
我错过了什么?
我有一个基类,Primitive从中派生我其他几个classes-- Sphere,Plane等
Primitiveintersect()通过纯虚函数强制执行某些功能,例如,在其子类上.计算intersect取决于实例数据,因此将其作为成员方法是有意义的.
我的问题出现在以下内容中:我希望每个派生实例都能够通过std::string type()成员方法识别其类型.由于同一个类的所有实例都将返回相同的类型,因此制作方法是有意义type()的static.因为我也希望每个Primitive子类都实现这个方法,所以我也想让它成为一个纯虚函数,就像intersect()上面一样.
但是,C++中不允许使用静态虚方法. C++静态虚拟成员? 并且 我们可以有一个虚拟的静态方法?(c ++) 提出类似的问题,但它们不包括在派生类上强制执行函数的要求.
任何人都可以帮我解决上述问题吗?
在从Emacs 23升级到Emacs 24时,文件名完成突然变为区分大小写shell-mode.在这种情况下我定制了Emacs 23以区分大小写,但我现在忘记了确切的自定义.翻过我的.emacs文件,我看到它read-file-name-completion-ignore-case设置为非零.但是,这似乎对Emacs 24没有任何影响shell-mode.
我说有一个代数数据类型
data Tree a = Node a (Tree a) (Tree a) | Empty
我想null返回True的Empty节点; False除此以外.
例如,
> tree = Empty
> null tree
Run Code Online (Sandbox Code Playgroud)
现在,这会产生以下错误.
<interactive>:261:1: error:
• No instance for (Foldable Tree) arising from a use of ‘null’
• In the expression: null tree
In an equation for ‘it’: it = null tree
Run Code Online (Sandbox Code Playgroud)
请注意,null不会返回True的Nothing.
> null Nothing
True
Run Code Online (Sandbox Code Playgroud) 在编写探索生日悖论的程序时,我有以下工作Haskell代码
sort :: Ord a => [a] -> [a]
-- body
hasDuplicates :: Eq a => [a] -> Bool
-- body
boolToInt :: Bool -> Int
-- body
main = do
-- stuff
repeats <- liftM sum . replicateM numTrials . liftM boolToInt .
liftM hasDuplicates . liftM sort . replicateM checkNum $
randomRIO (1::Int, 365)
-- stuff
Run Code Online (Sandbox Code Playgroud)
在最后一行,有很多liftM一个接一个地组成.这个组合可以优化吗?
我想到了map平liftM到[boolToInt, hasDuplicates, sort],然后compose荷兰国际集团,但该名单是异类所以无效.iterate由于类似的原因不会起作用.