Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef REDI_NBT_BASE
- # define REDI_NBT_BASE
- # include <iostream>
- # include <memory>
- namespace redi
- {
- namespace nbt
- {
- enum class NBTType : std::uint8_t
- {
- End,
- Byte,
- Short,
- Int,
- Long,
- Float,
- Double,
- ByteArray,
- String,
- List,
- Compound,
- IntArray
- };
- inline std::ostream& operator<<(std::ostream& os, NBTType type)
- {
- os << static_cast<int>(type);
- return os;
- }
- template <typename T, NBTType tagType>
- class ScalarTag;
- using TagByte = ScalarTag<std::int8_t, NBTType::Byte>;
- using TagShort = ScalarTag<std::int16_t, NBTType::Short>;
- using TagInt = ScalarTag<std::int32_t, NBTType::Int>;
- using TagLong = ScalarTag<std::int64_t, NBTType::Long>;
- using TagFloat = ScalarTag<float, NBTType::Float>;
- using TagDouble = ScalarTag<double, NBTType::Double>;
- class Tag
- {
- public:
- Tag(NBTType type);
- virtual ~Tag() = 0;
- NBTType getType() const { return mType; }
- //template <typename T>
- //T& get()
- //{
- // T* ptr = dynamic_cast<T*>(this);
- // if (ptr) return *ptr;
- // throw std::invalid_argument("");
- //}
- //template <typename T>
- //const T& get() const
- //{
- // const T* ptr = dynamic_cast<const T*>(this);
- // if (ptr) return *ptr;
- // throw std::invalid_argument("");
- //}
- template <NBTType type>
- void get()
- {
- }
- /*
- {
- blah<E::b>();
- blah<E::a>();
- }
- enum class E { a, b };
- template <E e>
- void blah() { cout << "0"; }
- template <>
- void blah<E::a>() { cout << "1"; } //
- */
- protected:
- NBTType mType;
- };
- template <>
- inline TagByte Tag::get<NBTType::Byte>()
- {
- //return get<TagByte>();
- return TagByte();
- }
- using TagPtr = std::shared_ptr<Tag>;
- } // namespace nbt
- } // namespace redi
- #endif
- Severity Code Description Project File Line Suppression State
- Error C2910 'redi::nbt::Tag::get': cannot be explicitly specialized redi e:\info\repos\redstoneinside\src\nbt\tag.hpp 102
- x 3
Advertisement
Add Comment
Please, Sign In to add comment