我想變體包含其類型的對象的副本。不知怎的,它不工作:遞歸變體容器編譯器錯誤
struct value
{
};
class json;
using json = ::boost::variant<
::std::vector<::std::unique_ptr<json> >,
::std::unordered_map<::std::string, ::std::unique_ptr<json> >,
value
>;
json.hpp:116:2: error: conflicting declaration 'using json = '
>;
^
json.hpp:110:7: error: 'class json' has a previous declaration as 'class json'
class json;
我知道2級的解決方法已經:::std::unique_ptr<void>
,具有定製刪除,以及使用::boost::any
,而不是變種的可能性,但這些的唯一途徑? ::boost::any
的問題在於我需要啓用RTTI
才能正常工作。
嗯,問題是名稱衝突。你不把別名作爲'json_variant'還是別的? –
你想要一個'recursive_variant'(...或者其他所謂的)。 Boost有一個特定的界面。對於它的價值,'class json;'意味着你將有一個名爲'json'的類,其中'using ='聲明的typedef-name不是。 – Potatoswatter
@ user1095108不是一個非常值得回答的問題,但你應該閱讀http://www.boost.org/doc/libs/1_55_0/doc/html/variant/tutorial.html#variant.tutorial.recursive – Potatoswatter