Karena ketidakmampuan saya untuk menemukan jawaban atau kata-kata yang tepat untuk mencari saya bertanya di sini:

Saya memiliki enum kelas (panjang) yang ditentukan oleh

enum class SomeLongName { Foo = 1, Bar = 7, FooBar = 42 };

Satu-satunya cara saya tahu untuk mendefinisikan vektor itu adalah:

#include <vector>

enum class SomeLongName { Foo = 1, Bar = 7, FooBar = 42 };

int main() {
  std::vector<SomeLongName> v1 = {
    SomeLongName::Foo,
    SomeLongName::FooBar
  };
  return 0;
}

Apakah ada cara (sintaks singkat alternatif) untuk menggunakan class enum dan tidak perlu menulis ulang SomeLongName:: untuk setiap nilai secara independen? mis. sesuatu seperti (tidak bekerja)

#include <vector>

enum class SomeLongName { Foo = 1, Bar = 7, FooBar = 42 };

int main() {
  std::vector<SomeLongName> v1 = (SomeLongName::) { Foo , Bar };
  return 0;
}

Dalam hal ini penting: Saya menggunakan MSVC 2019, amd64 (64bit), C++17 di windows 10 64bit

Catatan: menggunakan typedef seperti yang disarankan di utas diskusi stackoverflow ini sebenarnya bukan yang saya inginkan atau minta

2
Martin 12 Mei 2021, 12:15

2 jawaban

Jawaban Terbaik

C++20 ditambahkan menggunakan sintaks enum X, yang melakukan seperti apa tampilannya.

#include <vector>

enum class SomeLongName { Foo = 1, Bar = 7, FooBar = 42 };

int main()
{
    using enum SomeLongName;
    std::vector<SomeLongName> v1 = { Foo, Bar };
    return 0;
}

Di versi sebelumnya, Anda dapat menggunakan enum alih-alih kelas enum.

5
Argishti Ayvazyan 12 Mei 2021, 09:31

Pra C++20: Sayangnya tidak. Ini adalah "fitur" enum yang dicakup sehingga Anda harus menambahkan nama tipe enum. Namun, sebelum enum yang dicakup menjadi sesuatu, biasanya membungkus enum di kelas untuk menghindari polusi namespace. Anda masih dapat melakukannya:

#include <vector>

struct SomeLongName {
    enum values { Foo = 1,Bar = 7, FooBar = 42};

    static std::vector<values> make_vect() {
        return {Foo,FooBar};
    }
};

int main() {
    auto v = SomeLongName::make_vect();
}

Ini tidak "bagus" tetapi berhasil.

C++20 sebelumnya: Saya merujuk Anda ke jawaban ini.

2
largest_prime_is_463035818 12 Mei 2021, 09:39