在C ++中编译函数调用次数的时间限制

时间:2015-12-01 02:23:40

标签: c++

我有一个Builder类,它有许多set方法(有各种名称和参数)。我需要允许调用最多4个这样的方法,而不是更多。如果调用超过4个set函数,我显然会生成运行时错误,但我想生成编译器错误。这将是一个编程错误,我希望有机会修复它(决定我要保留哪4个调用)而不是等到它运行时失败(在这种情况下我必须做一些任意的事情,比如忽略第五个)。我需要一个使用标准C ++的解决方案,但不需要新的C ++ 11功能。下面是5个调用的示例(应该在第五个调用时生成编译器错误)。

Builder builder();  
builder.setA(1);  
builder.setB(1.3);  
builder.setC("sss");  
builder.setD(0);  
builder.setE(3, "aaa");  

1 个答案:

答案 0 :(得分:2)

您可以使用以下内容:

template <typename T, int N>
struct result {
    T values[N];
};

template <typename T, int I, int N>
class builder_ {
    T*  values;
    friend class builder_<T, I - 1, N>;
    builder_(T* values): values(values) {}
public:
    builder_(result<T, N>& r): values(r.values) {}
    builder_<T, I + 1, N> set(T const& value) {
        *values = value;
        return builder_<T, I + 1, N>(this->values + 1);
    }
};
template <typename T, int N>
class builder_<T, N, N> {
public:
    builder_(T*) {}
};
template <typename T, int N>
builder_<T, 0, N> builder(result<T, N>& r) {
    return builder_<T, 0, N>(r);
}

int main()
{
    result<int, 4> r;
    builder(r)
        .set(1)
        .set(2)
        .set(3)
        .set(4)
        ;
}