如何像 Haskell 中的“undefined”一样在 C++ 中保留未定义的声明函数?
How to leave a declared function undefined in C++ like with `undefined` in Haskell?
在 Haskell 中有一个名为 undefined
的常量,您可以使用它来
像 square
in 一样声明一个函数而不定义它(即函数原型为空体)
square :: Int -> Int -- declaration
square = undefined -- empty definition
main = putStrLn.show.square $ 3
这对于推迟 square
的工作并专注于首先正确使用 main
函数非常有用,因为 Haskell 编译器确保整个文件编译时就像square
已定义。
C++ 等价物是
#import <iostream>
int square(int x){
//TODO incomplete
return 0;
}
int main() {
std::cout << square(3);
}
我的意图是单独调用像 clang++
这样的编译器作为 main
的类型检查器,然后在 square
上工作。想象一下,square
确实是许多尚未定义的复杂函数之一,return 是一个具有非平凡构造函数的复杂数据结构。我将不得不编写大量代码来创建 returnable 对象,只是为了编译函数。
C++ 中是否有类似 undefined
的快捷方式?
谢谢@molbdnilo。
使用 throw
简洁且完美:
int square(int x) {
throw("undefined");
}
您还可以使用如下断言:
int square(int x)
{
assert(0);
}
这样的好处是不会被捕获,永远会失败。如果您忘记实现该功能,这将更好地保护您。
C++ 具有纯 virtual
函数,用于抽象基础 classes。
class foo {
virtual void bar() = 0;
};
无法调用函数foo::bar()
,甚至无法创建foo
对象,但可以在foo
的派生class中覆盖它。但是,您可以为它定义派生的 classes 默认继承。
C++ 中与 undefined
有点相似的另一件事是未初始化的函数指针。更安全、更现代的解决方案可能是 lambda 表达式或 static
中止程序的存根函数。
undefined
在实际使用中的含义类似于:一个占位符,如果您尝试实际调用它会使程序崩溃,但它会正确编译并进行类型检查。对于单个目标文件,为未在任何地方定义的函数声明一个 extern
原型就可以完成这项工作。如果要链接整个程序,则必须有某种定义(尽管函数指针可以绕过它,但要以安全为代价),但它可以是存根。
在 Haskell 中有一个名为 undefined
的常量,您可以使用它来
像 square
in 一样声明一个函数而不定义它(即函数原型为空体)
square :: Int -> Int -- declaration
square = undefined -- empty definition
main = putStrLn.show.square $ 3
这对于推迟 square
的工作并专注于首先正确使用 main
函数非常有用,因为 Haskell 编译器确保整个文件编译时就像square
已定义。
C++ 等价物是
#import <iostream>
int square(int x){
//TODO incomplete
return 0;
}
int main() {
std::cout << square(3);
}
我的意图是单独调用像 clang++
这样的编译器作为 main
的类型检查器,然后在 square
上工作。想象一下,square
确实是许多尚未定义的复杂函数之一,return 是一个具有非平凡构造函数的复杂数据结构。我将不得不编写大量代码来创建 returnable 对象,只是为了编译函数。
C++ 中是否有类似 undefined
的快捷方式?
谢谢@molbdnilo。
使用 throw
简洁且完美:
int square(int x) {
throw("undefined");
}
您还可以使用如下断言:
int square(int x)
{
assert(0);
}
这样的好处是不会被捕获,永远会失败。如果您忘记实现该功能,这将更好地保护您。
C++ 具有纯 virtual
函数,用于抽象基础 classes。
class foo {
virtual void bar() = 0;
};
无法调用函数foo::bar()
,甚至无法创建foo
对象,但可以在foo
的派生class中覆盖它。但是,您可以为它定义派生的 classes 默认继承。
C++ 中与 undefined
有点相似的另一件事是未初始化的函数指针。更安全、更现代的解决方案可能是 lambda 表达式或 static
中止程序的存根函数。
undefined
在实际使用中的含义类似于:一个占位符,如果您尝试实际调用它会使程序崩溃,但它会正确编译并进行类型检查。对于单个目标文件,为未在任何地方定义的函数声明一个 extern
原型就可以完成这项工作。如果要链接整个程序,则必须有某种定义(尽管函数指针可以绕过它,但要以安全为代价),但它可以是存根。