类Template C ++ 03 / c ++ 11中的函数特化

时间:2017-03-01 10:09:52

标签: c++ c++11 templates

我有两个模板类,通常我更喜欢foo类的Search版本。但遗憾的是,由于缺少c ++ 11支持,我的编译器无法理解foo版本。 (他不会理解这一行:template <typename U = _Format>

bar版本将创建_Format类型的实例以调用正确的委托。所以也调用了一个构造函数!与Foo版本相比,这会是性能问题吗? (我知道这就像过早的优化,但我感兴趣)

#include <iostream>

struct format1 {
    format1(void) { }
};

struct format2 {
    format2(void) { }
};

namespace foo
{
    template <typename _Format>
    class Search
    {
    public:
        void createData()
        {
            doCreateData();
        }

    private:
        template <typename U = _Format>
        void doCreateData();

        template <>
        void doCreateData<format1>()
        {
            using namespace std;
            cout << "Format1" << endl;
        }

        template <>
        void doCreateData<format2>()
        {
            using namespace std;
            cout << "Format2" << endl;
        }
    };
}

namespace bar
{
    template <typename _Format>
    class Search
    {
        public:
            void createData(void)
            {
                doCreateData(_Format());
            }

        private:
            void doCreateData(format1)
            {
                using namespace std;
                cout << "Format1" << endl;
            }

            void doCreateData(format2)
            {
                using namespace std;
                cout << "Format2" << endl;
            }
    };
}

int main(int argc, char *argv[])
{
    (void)argc; (void)argv;

    bar::Search<format2> search;
    search.createData();
}

0 个答案:

没有答案