将C++模板限制为基本类型

 兔牙的猪蹄 发布于 2023-02-12 16:47

我有一个类,它基本上是一个double的包装器,允许它的值被强制为静态值:

class ModelParameter
{
    protected:
        double val;
        bool isForced;
        double forcedVal;

    public:
        ModelParameter(void);
        ModelParameter(double value);
        double getValue(void);
        void setValue(double value);
        bool getIsForced(void);
        void forceValue(double value);
        void unforceValue(void);
};

但我希望能够将它用于任何原始类型,而不仅仅是双打.如果我像这样重新定义它:

template 
class ModelParameter
{
    protected:
        T val;
        bool isForced;
        T forcedVal;

    public:
        ModelParameter(void);
        ModelParameter(T value);
        T getValue(void);
        void setValue(T value);
        bool getIsForced(void);
        void forceValue(T value);
        void unforceValue(void);
};

这意味着可以使用任何类型,无论它是否是原始的.有没有什么办法可以限制模板中使用的类型只使用原始类型?

2 个回答
  • 一种方法是针对您的预期类型进行显式实例化.将所有实现移动到.cpp文件中并为这些类型实例化:

    .cpp文件:

    ...
    
    Definitions and implementation
    
    ....
    
    class ModelParameter<float>;
    class ModelParameter<int>;
    
    ...
    

    然后,它适用于那些类型.

    2023-02-12 16:48 回答
  • (注意:需要C++ 11)

    #include <type_traits>
    
    template <class T>
    class ModelParameter
    {
        static_assert(std::is_fundamental<T>::value, "error message");
        ...
    };
    

    但是你为什么要这样做呢?

    2023-02-12 16:49 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有