隐藏 constexpr 计算的最佳方法

Bro*_*thy 1 c++ constexpr c++14 c++17

我想创建一个 constexpr param 结构。它的几个成员将由 constexpr 函数计算。喜欢:

class Params {
public:
    static constexpr size_t featureWinW{ 7 };
    static constexpr size_t featureWinH{ 7 };

private:
    static constexpr size_t getKernelSize()
    {
        //complex calculation
        return 20;
    }

public:
    static constexpr size_t kernelSize{ getKernelSize() };
}
Run Code Online (Sandbox Code Playgroud)

我知道 getKernelSize 就像是在类外部定义的,所以代码是错误的:

error: ‘static constexpr size_t Params::getKernelSize()’ called in a constant expression before its definition is complete
Run Code Online (Sandbox Code Playgroud)

我应该如何重新格式化我的代码以使其有效,即使是具有类似私有计算函数的专用命名空间也不会产生垃圾邮件?

Jar*_*d42 6

可以考虑使用 Lambda:

class Params {
public:
    static constexpr std::size_t featureWinW{ 7 };
    static constexpr std::size_t featureWinH{ 7 };
    static constexpr std::size_t kernelSize{
        [](){
            //complex calculation
            return 20;
        }(); //  immediately called.
     };
};
Run Code Online (Sandbox Code Playgroud)

演示