我希望能够使用一些默认值来初始化对象,但是要从外部代码(不嵌入到类本身中)执行此操作。这些对象暴露给外部编辑器,我不想一次又一次地设置相同的值,只更改一些不同的值。因为我已经有了模板类,所以我想从“特征”类中做到这一点。
这是我想要实现的一个简单示例:
template<typename Traits>
class Test
{
    public:
        Test()
        {
            //if Traits has Init init function call Traits::Init(this)
        }
    private:
        typename Traits::Type value;
    friend Traits;
};
struct TestTraits
{
    typedef std::string Type;
};
struct TestTraitsInit
{
    typedef int Type;
    static void Init(Test<TestTraitsInit>* obj)
    {
        obj->value = 0;
    }
};
int main()
{
    Test<TestTraits> obj1;
    Test<TestTraitsInit> obj2;
}
如您所见,Init()仅在某些情况下才有意义。是否可以检查类Traits是否具有Init()功能并仅在它存在时才调用它?
我知道一个非常简单的解决方案是使用空Init()函数,但我想要一个更好的解决方案:)