小编wsa*_*eem的帖子

为什么调用成员函数就好像它是静态的(当它不是)在C++中工作?

根据我对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)

我错过了什么?

c++ static-methods

7
推荐指数
2
解决办法
178
查看次数

如何在派生类上强制执行静态成员?

我有一个基类,Primitive从中派生我其他几个classes-- Sphere,Plane

Primitiveintersect()通过纯虚函数强制执行某些功能,例如,在其子类上.计算intersect取决于实例数据,因此将其作为成员方法是有意义的.

我的问题出现在以下内容中:我希望每个派生实例都能够通过std::string type()成员方法识别其类型.由于同一个类的所有实例都将返回相同的类型,因此制作方法是有意义type()static.因为我也希望每个Primitive子类都实现这个方法,所以我也想让它成为一个纯虚函数,就像intersect()上面一样.

但是,C++中不允许使用静态虚方法. C++静态虚拟成员? 并且 我们可以有一个虚拟的静态方法?(c ++) 提出类似的问题,但它们不包括在派生类上强制执行函数的要求.

任何人都可以帮我解决上述问题吗?

c++ methods virtual static

6
推荐指数
2
解决办法
3935
查看次数

如何在Emacs 24 shell模式下禁用文件名自动完成的区分大小写?

在从Emacs 23升级到Emacs 24时,文件名完成突然变为区分大小写shell-mode.在这种情况下我定制了Emacs 23以区分大小写,但我现在忘记了确切的自定义.翻过我的.emacs文件,我看到它read-file-name-completion-ignore-case设置为非零.但是,这似乎对Emacs 24没有任何影响shell-mode.

shell autocomplete upgrade case-sensitive emacs24

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

如何在Haskell中创建一个nullary数据构造函数返回True为null

我说有一个代数数据类型

data Tree a = Node a (Tree a) (Tree a) | Empty

我想null返回TrueEmpty节点; 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不会返回TrueNothing.

> null Nothing
True
Run Code Online (Sandbox Code Playgroud)

null haskell

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

优化Haskell组合中的重复函数调用

在编写探索生日悖论的程序时,我有以下工作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一个接一个地组成.这个组合可以优化吗?

我想到了mapliftM[boolToInt, hasDuplicates, sort],然后compose荷兰国际集团,但该名单是异类所以无效.iterate由于类似的原因不会起作用.

haskell

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