我当前正在编写一个程序,该程序在一个头文件中共享许多模板结构。为了评估这些模板,我使用其他一些帮助器结构,例如:

#define MAX 10

struct function1 {
    static constexpr int f(int x) {
        return x*(x*x+20);
    }
};

struct function2 {
    static constexpr int f(int x) {
        return (x*x+20);
    }
};

// This structure contains supremum of function contained in
// type T, on interval (0, MAX). We're assuming that f(0) is 0
// for each function class passed in T.
template <typename T>
struct supremum {
    static constexpr int valueF(int n) {
        return n == 0 ? 0 : (T::f(n) > T::f(n-1) ? n : valueF(n-1));
    }
    static constexpr int value = valueF(MAX);
};

template <typename T1, typename T2>
struct supremums {
    static constexpr int s1 = supremum<T1>::value;
    static constexpr int s2 = supremum<T2>::value;
};

// Sample struct initialization
supremums<function1, function2> s;

所以这是我的头文件-问题是我想与使用它的用户共享supremums结构,但是我不想使用辅助结构supremum来做到这一点。有没有办法从“外面”隐藏supremum

抱歉,我只是注意到这些最高结构无效,但是这些只是我要显示特定问题的示例,因此它们的有效性不是问题。

最佳答案

templates are usually implemented in header files开始,如果用户想监听它们,通常就无法向用户隐藏它们。

最好的办法是将它们放在命名空间(例如detailimpl_detail)中,并将它们记录为实现细节。希望您的头文件的用户将注意文档,而不使用该 namespace 下的任何内容。

关于c++ - C++-使头文件的结构对外部不可见,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34030832/

10-13 08:09
查看更多