小编Moh*_* El的帖子

Cmake生成器表达式

我正在尝试很长时间来理解生成器表达式的好处, 例如$<xxx:yy>在CMake中,何时以及如何使用它们.任何人都可以通过一些例子清楚地解释清楚.非常感谢

c++ cmake

15
推荐指数
1
解决办法
6703
查看次数

C++类名称数组

我正在构建一个可以通过添加新类来扩展的c ++框架

我想找到一种简化新​​类扩展的方法.

我目前的代码如下:

class Base {
public:
    virtual void doxxx() {...}
};

class X: public Base {
public:
    static bool isMe(int i) { return i == 1; }
};

class Y: public Base {
public:
    static bool isMe(int i) { return i == 2; }
};

class Factory {
public:
    static std::unique_ptr<Base> getObject(int i) {
        if (X::isMe(i)) return std::make_unique<X>();
        if (Y::isMe(i)) return std::make_unique<Y>();

        throw ....
    }
};
Run Code Online (Sandbox Code Playgroud)

此外,对于每个新类,都必须添加新的if语句.

现在我想找到一种方法来重写我的Factory类(使用元编程),可以通过调用add方法来完成添加新类,并且工厂类看起来像跟随伪代码:

class Factory
{
public:
    static std::unique_ptr<Base> getObject(int i) {
        for …
Run Code Online (Sandbox Code Playgroud)

c++ g++ metaprogramming template-meta-programming

2
推荐指数
1
解决办法
361
查看次数

CRTP 共享指针的 C++ 向量

在寻找在容器中存储 CRTP 对象的方法时,我发现了以下问题:

\n\n

C++ 中奇怪的重复模板模式 (CRTP) 的多态集合?

\n\n

我尝试了标记的解决方案

\n\n

/sf/answers/1735665921/

\n\n

但编译器抱怨错误如下:

\n\n
no known conversion for argument 1 from \xe2\x80\x98std::shared_ptr<DerivedA>\xe2\x80\x99 to \xe2\x80\x98const std::shared_ptr<BaseInterface>&\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我的尝试:

\n\n
#include <vector>\n#include <memory>\n\nstruct BaseInterface {\n    virtual ~BaseInterface() {}\n    virtual double interface() = 0;\n};\n\ntemplate <typename Derived>\nclass Base : BaseInterface {\npublic:\n    double interface(){\n        return static_cast<Derived*>(this)->implementation();\n}\n};\n\nclass DerivedA : public Base<DerivedA>{\npublic:\n     double implementation(){ return 2.0;}\n};\n\nclass DerivedB : public Base<DerivedB>{\npublic:\n     double implementation(){ return 1.0;}\n};\n\n\nint main() {\n    std::vector<std::shared_ptr<BaseInterface>> ar;\n    ar.emplace_back(std::make_shared<DerivedA>());\nreturn 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

您知道如何修复编译器错误,或者如何更好地解决问题吗?\n提前致谢

\n

c++ templates vector crtp c++11

2
推荐指数
2
解决办法
3491
查看次数