問題的前提是如何將模板化的類作為引數傳遞給另一個函式或至少獲得相同的效果:
下面是我的代碼的精簡版
template<uint8_t _bus>
class Com {
public:
uint8_t write() { return _bus; /* does something with template param */}
};
class Instruction
{
public:
int member;
void transmitFrame(char *msg) {
member = Com.write(msg); /* need to pass in Com object somehow */
}
};
main(){
Com<8> myCom;
Instruction myInstruction;
char[] msg = {'h', 'e', 'l', 'l', 'o'};
myInstruction.transmitFrame(msg);
}
上面的代碼不會編譯。我的第一個想法是擴展Com類,但據我所知,您不能擴展類模板。我的第二個想法是在模板中有一個模板?(所以使Instruction該類成為具有模板模板的模板類Com)但是我在那個雜草中并且不確定這是否可能。
Com在我嘗試使用該類時,該物件已被實體化Instruction。所以不知何故,我需要將模板化Com物件放入Instruction類中,以便我可以訪問它。
到時候我就沒想法了……
uj5u.com熱心網友回復:
您似乎試圖直接呼叫write類Com,而不是實體。
您可能想要傳遞 to 的實體Com,transmitFrame但要做到這一點,您必須傳遞模板資訊。
template <uint8_t N>
void transmitFrame(Com<N> &com, char *msg) {
com.write(msg); /* need to pass in Com object somehow */
}
或者,如果您知道模板值為8.
void transmitFrame(Com<8> &com, char *msg) {
com.write(msg); /* need to pass in Com object somehow */
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/489101.html
