我目前有兩個不同的標題定義相同的類。它們之間的變化是函數實現和單個變量。具有模板功能的跨平臺類
header_linux.h
class Class
{
private:
QStringList processesList; // Same variable
pid_t pid; // Different variable
public:
void fillProcessesList()
{
// Different implementation
}
void isProcessRunning(QString name)
{
// Same implementation
}
template<typename T>
bool readMemory(unsigned long long address, T &destination)
{
// Different implementation
}
header_win32.h
class Class
{
private:
QStringList processesList; // Same variable
HANDLE handle; // Different variable
public:
void fillProcessesList()
{
// Different implementation
}
void isProcessRunning(QString name)
{
// Same implementation
}
template<typename T>
bool readMemory(unsigned long long address, T &destination)
{
// Different implementation
}
我想有共同的變量和函數在一個文件中。
我的想法是創建header.h定義的類及其成員,header.cpp它實現其實施OS-的常用功能,然後header_linux.cpp和header_win32.cpp具體功能。
但是,模板函數必須在頭文件中實現。
我可以使用預處理器宏檢查操作系統,並根據使用正確的實現,在一個頭,但功能很多,他們的身體很大。
經過大量的研究,我發現PIMPL的成語,但實現似乎很複雜。
有沒有更好的方法?
值得一提的是,在閱讀前幾句話後,「Pimpl」是我想到的第一個想法。 –
你應該將你的操作系統特定的東西包裝到一個**非**泛型函數中,並且與之交互。據我所知,操作系統不會執行模板 –
***,但實現看起來很複雜。***您必須閱讀錯誤的來源。使用PIMPL的複雜性很少(至少對我來說)。儘管自20世紀80年代初我開始編程。 – drescherjm