小编Ulr*_*rdt的帖子

如何实现类型化/类型安全迭代器?

我的代码看起来像这样,我想改进它:\n \n\n

// example type\nclass Stuff\n{\n    public function __construct($name)\n    {\n        $this->name = $name;\n    }\n\n    public function getName()\n    {\n        return $this->name;\n    }\n}\n\n// generator function\nfunction searchStuff()\n{\n    yield new Stuff(\'Fou\');\n    yield new Stuff(\'Barre\');\n    yield new Stuff(\'Bazze\');\n}\n\n// code that iterates over the results of the generator\n$stuffIterator = searchStuff();\nassert($stuffIterator instanceof Iterator);\nforeach ($stuffIterator as $stuff) {\n    /** @var Stuff $stuff */\n    echo $stuff->getName() . PHP_EOL;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想要改进的是循环中的注释(倒数第三行),我想完全删除它。原因是

\n\n
    \n
  • 正确的类型提示应该是不必要的,甚至是由语言强制执行的
  • \n
  • 它可能反映也可能不反映现实,即它很容易因代码更改而中断
  • \n
  • 打字是不必要的工作,更糟糕的是阅读它。
  • \n
\n\n

我的 na\xc3\xafve 方法是声明一个迭代器接口,该接口向通用Iterator接口添加适当的类型注释:

\n\n
interface StuffIterator extends Iterator\n{\n …
Run Code Online (Sandbox Code Playgroud)

php type-safety php-7

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

使用带有__FILE__的`basename`是否安全?

标题非常清楚:使用basename(man 3 basename)是否安全__FILE__


它编译并且似乎工作正常,但是 basename参数是char*(不是const char*),- manpage表示:

dirname()和basename()都可以修改path的内容,因此在调用其中一个函数时可能需要传递一个副本.

所以,这让我担心.

也许问题应该更像:什么类型的__FILE__?这不是字符串文字/ const char*?但如果是,为什么没有编译时错误(const char*to char*)?

c c++ posix

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

函数指针的可变函数

有没有办法将可变参数函数强制转换为这样的函数指针,这是合法的吗?我要求C和C++,但由于这个结构存在于两种语言中,我将两个问题都放在一起.

extern int test(int, ...);
auto testptr = (int(*)(int, int, long)) &test;
Run Code Online (Sandbox Code Playgroud)

谢谢,杰克

c++ function variadic-functions

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

标签 统计

c++ ×2

c ×1

function ×1

php ×1

php-7 ×1

posix ×1

type-safety ×1

variadic-functions ×1