在這些論壇上有幾個關於繼承C++枚舉的擴展問題(實際上是沒有邏輯的東西)。但是,爲了設置特定的值,繼承又如何呢? 目前,像在我的代碼如下:在C++中單獨枚舉聲明和定義11
//lib_impl.h
enum class X {
a = 13, // these values are
b = 42 // implementation dependent
}
//lib.h
#include "lib_impl.h"
void some_func(X param) {
X x = X::a;
}
我只是想避免其實施「LIB」的的關係是不。可能的話,除了枚舉之外,必須使用其他的東西。由於即使在C++ 11我們只申報向前枚舉名的能力,而不是它的枚舉:
//lib.h
enum class X { a, b } // this is both declaration and definition, unfortunately
void some_func(X param) {
X x = X::a;
}
//lib_impl.h
#include "lib.h"
enum class X { // redefenition, compilation error
a = 13,
b = 42
}
什麼是此類問題的最佳編譯時的解決方案?
-
,因爲它似乎是在C++中不可實現的,什麼是解決此類問題的最常見的方式是什麼?將'imp'從'impl'的依賴關係保持原樣?可能「impl」可以分成兩部分,小部分將包含在'lib.h'之前,其他更大的部分將包含在它之後。是好的,還是我需要放棄使用枚舉來支持抽象類?
編譯器應該如何生成'some_func'的代碼? 「X :: a」是一個編譯時常量,在這種情況下,編譯器需要以某種方式查看實際值。否則它是一個佔用空間的變量,在這種情況下,編譯器將生成用於從該空間加載值的代碼。你可以實現後者,我使'X'成爲一個實際的類,'''成爲它的靜態成員。 –
靜態函數不能是虛擬的,可以嗎? – Grief
不,他們不能。雖然我很難看到這個事實與手頭問題的相關性。 –