相关疑难解决方法(0)

C ++函数模板问题

我使用C#已有很长时间了,我对C ++中的函数模板有一些疑问。

template <typename T>
T max(T x, T y)
{
    return (x > y) ? x : y;
}
Run Code Online (Sandbox Code Playgroud)
  1. 为什么在模板参数声明中typename使用某些示例而使用其他示例class?有什么不同?
  2. 是否有任何方法可以限制T到特定类型,或从特定类型派生的类型?
  3. 一个类是否可以通过两种方法使用相同的名称,但一种方法是模板化的,而另一种则不是?

更新:

我很感谢所有答案,但是其中一些包含了一些示例,当我尝试将其应用于我的代码时,这些示例将不会编译。

为了澄清问题3,我有以下方法:

template<typename T>
std::unique_ptr<T> ExecuteSqlQuery(LPCTSTR pszSqlQuery, UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE);
Run Code Online (Sandbox Code Playgroud)

我想声明使用CRecordsetas 的此变量的变体T,以使以下任一语句均有效:

auto result = db.ExecuteSqlQuery<CCustomerRecordset>(L"SELECT ...");

auto result = db.ExecuteSqlQuery(L"SELECT ...");
Run Code Online (Sandbox Code Playgroud)

c++ templates

3
推荐指数
4
解决办法
121
查看次数


如何制定政策规定成员变量类型?

在尝试应用基于策略的设计时,我陷入了困境(简化):

template <class TPrintPolicy, typename T>
struct A : private TPrintPolicy {
    using TPrintPolicy::Print;
    T t;
    void Foo() {
        Print(t);
    }
};

struct IntPolicy {
    void Print(int n) {
        std::cout << n << std::endl;
    }
};

int main(int argc, char* argv[]) {
    A<IntPolicy, int> a;
    a.Foo();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这里有一个问题:我应该如何重新定义A类,以便只能为A模板提供策略参数,让它自己推断T,如下所示:

A<IntPolicy> a;
Run Code Online (Sandbox Code Playgroud)

优选地,政策定义不应该比现在复杂得多.有任何想法吗?

编辑:
我忘了提到我不希望策略导出typedef.这当然是简单的解决方案,但不能自己推断T的类型?

c++ templates

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

C++模板的Class和Typename之间的区别

我对c ++模板略感困惑.

考虑下面的模板

template<class TYPE>
void function(TYPE data)
Run Code Online (Sandbox Code Playgroud)

template<typename TYPE>
void function(TYPE data)
Run Code Online (Sandbox Code Playgroud)

我的困惑正是用作变量标识或类型的typename和class之间的区别.

c++ templates c++11

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

正确使用模板类

我有一个练习,其中我必须使用模板类“Garage”,该类将“汽车”或“自行车”作为参数。很简单,但我不断收到错误,因为我显然对模板的理解不够好。这是 :

template<class Car>
class Garage{
    Car array[10];
public:
    void addCar(int counter1);
    void removeCar(int counter1);
    void displayContents(int counter1);
};

template<class Motorbike>
class Garage{
    Motorbike array[10];
public:
    void addMotorbike(int counter2);
    void removeMotorbike(int counter2);
    void displayContents(int counter2);
};
 
Run Code Online (Sandbox Code Playgroud)

恰当的 ?我是否必须在类的每个函数前面插入模板?该程序当然包含更多的类和函数,但它是我需要在头脑中整理出来的模板。感谢您抽出宝贵的时间。

c++

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

标签 统计

c++ ×5

templates ×4

c++11 ×1

class ×1

typename ×1

types ×1