As I understand, dynamic polymorphism can use more SRAM, and static polymorphism may use more program space. Is this statement correct?
Should I prefer to use static polymorphism If I want to use less memory for vtbl? does it really beneficial.
Here is a simple example with two approaches
#include <iostream>
struct Message {
int value;
};
class MessageReceiver {
public:
virtual Message receive()= 0;
};
class ConcreteMessageReceiver : public MessageReceiver {
public:
Message receive() override {
return {};
}
};
class ConcreteTemplateMessageReceiver {
public:
Message receive() {
return {};
}
};
class ClientA {
MessageReceiver *messageReceiver;
public:
ClientA(MessageReceiver *messageReceiver) : messageReceiver(messageReceiver) {}
void doSomething() {
const Message &message = messageReceiver->receive();
}
};
template<typename R>
class ClientB {
R receiver;
public:
ClientB(R receiver) : receiver(receiver) {}
void doSomething() {
Message message = receiver.receive();
}
};
int main() {
ConcreteMessageReceiver concreteMessageReceiver;
ClientA clientA{&concreteMessageReceiver};
clientA.doSomething();
ConcreteTemplateMessageReceiver concreteTemplateMessageReceiver;
ClientB<ConcreteTemplateMessageReceiver> clientB{concreteTemplateMessageReceiver};
clientB.doSomething();
return 0;
}
Will code for ClientB use less SRAM?