簡體   English   中英

在 C++ 中調用條件構造函數

[英]Conditional constructor calling in C++

在下面的代碼中

#include <iostream>

enum class motorid{
    M1,
    M2
};
enum class encoderid{
    E1,
    E2
};
class encoder{
public :
    encoder(encoderid eid):Eid(eid){}
private:
    encoderid Eid;
};
class motor{
    public:
    motor(motorid mid):Mid(mid){
        if(mid == motorid::M1){
            e(encoderid::E1);
        }
        e(encoderid::E2);
    }
    private:
    motorid Mid;
    encoder e;
}

我想初始化編碼器 class,其值基於從 main 給電機 class 的值,我不想將編碼器細節暴露給 main,但我也被迫提供編碼器類型。 如何做到這一點? 由於使用 new 不涉及堆,因此創建 object 不是一種選擇。

語法是:

motor(motorid mid):Mid(mid), e(mid == motorid::M1 ? encoderid::E1 : encoderid::E2)
{
}

對於更復雜的情況(或為了可讀性),創建 function 可能會有所幫助:

encoderid create_encoderid(motorid mid)
{
    if (mid == motorid::M1){
        return encoderid::E1;
    }
    return encoderid::E2;
}

motor::motor(motorid mid):Mid(mid), e(create_encoderid(mid))
{
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM