相关疑难解决方法(0)

为什么不从构造函数推断模板参数?

今天我的问题很简单:为什么编译器不能从类构造函数中推断模板参数,就像它可以从函数参数那样做?例如,为什么以下代码无效:

template<typename obj>
class Variable {
      obj data;
      public: Variable(obj d)
              {
                   data = d;
              }
};

int main()
{
    int num = 2;
    Variable var(num); //would be equivalent to Variable<int> var(num),
    return 0;          //but actually a compile error
}
Run Code Online (Sandbox Code Playgroud)

正如我所说,我明白这是无效的,所以我的问题是为什么不是呢?允许这会产生任何重大的句法漏洞吗?是否存在不希望使用此功能的实例(推断类型会导致问题)?我只是想了解允许函数的模板推理背后的逻辑,但不适用于适当构造的类.

c++ parameters templates inference

101
推荐指数
6
解决办法
2万
查看次数

在显式构造函数中键入推断

我正在使用以下代码来处理某些类型的安全提示,该代码在相关单元之间进行转换...

#include <cmath>
#include <limits>

template <typename T>
class Pascal
{

private:
    T val;

public:
    explicit Pascal(const T val_)
    {
        val = val_;
    }

    operator T() const
    {
        return val;
    }

};

template <typename T>
class dbSPL {
private:
    T val;

public:
    explicit dbSPL(const Pascal<T> p)
    {
        auto infProtect = std::numeric_limits<T>::min();
        val = 20.0 * std::log10( infProtect + p / 20e-6 );
    }


    operator T() const
    {
        return val;
    }


};
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以从构造函数参数类型推断模板类型,而不是显式声明模板参数.例如auto p = Pascal(0.5),而不是打字auto p = …

c++ templates constructor c++11

1
推荐指数
1
解决办法
119
查看次数

标签 统计

c++ ×2

templates ×2

c++11 ×1

constructor ×1

inference ×1

parameters ×1