假设我有一个实现Runnable接口的抽象Base类.
public abstract class Base implements Runnable {
protected int param;
public Base(final int param) {
System.out.println("Base constructor");
this.param = param;
// I'm using this param here
new Thread(this).start();
System.out.println("Derivative thread created with param " + param);
}
@Override
abstract public void run();
}
Run Code Online (Sandbox Code Playgroud)
这是一些衍生类.
public class Derivative extends Base {
public Derivative(final int param) {
super(param);
}
@Override
public void run() {
System.out.println("Derivative is running with param " + param);
}
public static void main(String[] args) {
Derivative thread …Run Code Online (Sandbox Code Playgroud) 我有一个模板类,它将无符号整数作为模板参数,但我必须确保该数字是素数.例如,我可以在构造函数中检查它,但在编译期间最好这样做.
这是我正在使用的Assert模板:
template <bool statement>
class Assert;
template <>
struct Assert<true> {};
Run Code Online (Sandbox Code Playgroud)
我可以使用我的条件作为参数在任何要编译的代码中创建这种类型的对象,如果该条件为false则不会编译.问题是我必须检查一些数字是否为素数.让它成为n.
我想出了包含一个单独的文件"PrimeTest.h"的想法,并尝试通过在该文件中包含相同的文件将n从n-1除以n.这就是我使用它的方式:
#define SUSPECT n
#include "PrimeTest.h"
Run Code Online (Sandbox Code Playgroud)
这是"PrimeTest.h":
#ifdef SUSPECT
#ifndef CURRENT
#define CURRENT (SUSPECT-1)
#endif // CURRENT
#ifndef FINISHED
#if CURRENT>100
#define IS_PRIME
#define FINISHED
#else
#if SUSPECT%CURRENT==0
#define IS_NOT_PRIME
#define FINISHED
#else
#define CURRENT (CURRENT-1) // THAT DOES NOT WORK!!!
#include "PrimeTest.h"
#endif // SUSPECT % CURRENT != 0
#endif
#endif // FINISHED
#endif // SUSPECT
Run Code Online (Sandbox Code Playgroud)
但问题出在这里:我无法以任何方式减少CURRENT,包括临时值和#pragma push_macro指令.任何想法如何做到这一点?