80% 够用就是最佳。剩下 20% 太过复杂的语法,有更高明的方式实现。
c++ 泛型的由来是静态语言太繁琐,需要动用代码生成器辅助用户生成代码。我觉得,应该向 NIM 学习在编译器操纵AST,但是更彻底地把代码生成器独立成新的模块,而不是用一套奇怪的语法混在普通代码里面。我看应该这样子。
// demo.ct
void withLogging(auto func) {
func.beforeCall(function("logging"));
}
// main.cpp
void logging() {}
@withLogging
void sayHello() {}
编译器编译两遍,第一遍编译工程里面所有的 *.ct, 第二遍编译 *.cpp,把 ast 交给第一遍代码处理之后再编译。两份代码都是 plain old c++,事情不就简单了。大多数泛型都可以省了。
【 在 here080 (hero080) 的大作中提到: 】
: 你这里定义不明确啊。
: 不能搞“我的脚掌长就是one feet”这种定义方式啊。
--
修改:hgoldfish FROM 125.78.67.*
FROM 112.47.122.*