gflags 支持 列表

// #pragma once

#include 
#include 
#include 


/////////
// type
/////////
#define GFLAGS_TYPE_bool   bool
#define GFLAGS_TYPE_int32  gflags::int32
#define GFLAGS_TYPE_uint32 gflags::uint32
#define GFLAGS_TYPE_int64  gflags::int64
#define GFLAGS_TYPE_uint64 gflags::uint64
#define GFLAGS_TYPE_double double
#define GFLAGS_TYPE_string std::string
#define GFLAGS_TYPE(type)  GFLAGS_TYPE_##type


////////////
// declare
////////////
#define DECLARE_each_variable(type, name)  DECLARE_##type(name)

#define DECLARE_vector(type, name)            \
    DECLARE_each_variable(type, name##_0);    \
    DECLARE_each_variable(type, name##_1);    \
    DECLARE_each_variable(type, name##_2);    \
    DECLARE_each_variable(type, name##_3);    \
    DECLARE_each_variable(type, name##_4);    \
    DECLARE_each_variable(type, name##_5);    \
    DECLARE_each_variable(type, name##_6);    \
    DECLARE_each_variable(type, name##_7);    \
    DECLARE_each_variable(type, name##_8);    \
    DECLARE_each_variable(type, name##_9);    \
    const GFLAGS_TYPE(type)& FLAGS_VECTOR_##name(size_t);


#define DECLARE_bool_vector(name)    DECLARE_vector(bool, name)

#define DECLARE_int32_vector(name)   DECLARE_vector(int32, name)

#define DECLARE_uint32_vector(name)  DECLARE_vector(uint32, name)

#define DECLARE_int64_vector(name)   DECLARE_vector(int64, name)

#define DECLARE_uint64_vector(name)  DECLARE_vector(uint64, name)

#define DECLARE_double_vector(name)  DECLARE_vector(double, name)

#define DECLARE_string_vector(name)  DECLARE_vector(string, name)


///////////
// define
///////////
#define DEFINE_each_variable(type, name, value, help)  DEFINE_##type(name, value, help)

#define DEFINE_vector_getter(type, name)                       \
    const GFLAGS_TYPE(type)& FLAGS_VECTOR_##name(size_t i) {   \
        switch(i) {                                            \
        case 0: return FLAGS_##name##_0;                       \
        case 1: return FLAGS_##name##_1;                       \
        case 2: return FLAGS_##name##_2;                       \
        case 3: return FLAGS_##name##_3;                       \
        case 4: return FLAGS_##name##_4;                       \
        case 5: return FLAGS_##name##_5;                       \
        case 6: return FLAGS_##name##_6;                       \
        case 7: return FLAGS_##name##_7;                       \
        case 8: return FLAGS_##name##_8;                       \
        case 9: return FLAGS_##name##_9;                       \
        }                                                      \
    }

#define DEFINE_vector(type, name, value, help)            \
    DEFINE_each_variable(type, name##_0, value, help);    \
    DEFINE_each_variable(type, name##_1, value, help);    \
    DEFINE_each_variable(type, name##_2, value, help);    \
    DEFINE_each_variable(type, name##_3, value, help);    \
    DEFINE_each_variable(type, name##_4, value, help);    \
    DEFINE_each_variable(type, name##_5, value, help);    \
    DEFINE_each_variable(type, name##_6, value, help);    \
    DEFINE_each_variable(type, name##_7, value, help);    \
    DEFINE_each_variable(type, name##_8, value, help);    \
    DEFINE_each_variable(type, name##_9, value, help);    \
    DEFINE_vector_getter(type, name)


#define DEFINE_bool_vector(name, value, help)    DEFINE_vector(bool, name, value, help)

#define DEFINE_int32_vector(name, value, help)   DEFINE_vector(int32, name, value, help)

#define DEFINE_uint32_vector(name, value, help)  DEFINE_vector(uint32, name, value, help)

#define DEFINE_int64_vector(name, value, help)   DEFINE_vector(int64, name, value, help)

#define DEFINE_uint64_vector(name, value, help)  DEFINE_vector(uint64, name, value, help)

#define DEFINE_double_vector(name, value, help)  DEFINE_vector(double, name, value, help)

#define DEFINE_string_vector(name, value, help)  DEFINE_vector(string, name, value, help)


//////////
// test
/////////
DEFINE_string_vector(message, "", "ddd");


int main(int argc, char** argv) {

    // google::ParseCommandLineFlags(&argc, &argv, true);

    FLAGS_message_0 = "hello";
    FLAGS_message_1 = "world";
    FLAGS_message_2 = "this";
    FLAGS_message_3 = "is";
    FLAGS_message_4 = "gflags";

    int idx = 2;

    std::cout << FLAGS_VECTOR_message(0) << std::endl;
    std::cout << FLAGS_VECTOR_message(1) << std::endl;
    std::cout << FLAGS_VECTOR_message(idx) << std::endl;

    return 0;
}

你可能感兴趣的:(gflags 支持 列表)