小编Jon*_*Mee的帖子

专门化成员函数时出现"模板参数列表太多"错误

我想在模板类中定义一些模板成员方法,如下所示:

template <typename T>
class CallSometing {
public:
    void call (T tObj);  // 1st 

    template <typename A>
    void call (T tObj, A aObj); // 2nd 

    template <typename A>
    template <typename B>
void call (T tObj, A aObj, B bObj); // 3rd

};


template <typename T> void
CallSometing<T>::call (T tObj) {
    std::cout << tObj << ", " << std::endl;
}

template <typename T>
template <typename A> void
CallSometing<T>::call (T tObj, A aObj) {
    std::cout << tObj << ", " << aObj …
Run Code Online (Sandbox Code Playgroud)

c++ templates arguments compiler-errors template-meta-programming

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

如何将成员函数传递给函数指针?

class Child;
class Parent
{
public:
  void (*funcPointer)();
  void (*funcPointer2)(Parent* _this);
  void (Child::*funcPointer3)();
};

class Child: public Parent
{
public:
  void TestFunc(){

  }
  void Do(){
    Parent p;
    p.funcPointer=TestFunc; // error, '=': cannot convert from 'void (__thiscall Child::* )(void)' to 'void (__cdecl *)(void)'
    p.funcPointer2=TestFunc; // error too, '=': cannot convert from 'void (__thiscall Child::* )(void)' to 'void (__cdecl *)(Parent *)'
    p.funcPointer3=TestFunc; //this works
    p.funcPointer3=&Child::TestFunc; // this works too.
    p.funcPointer3();    // error, term does not evaluate to a function taking 0 arguments …
Run Code Online (Sandbox Code Playgroud)

c++ methods member-function-pointers function-pointers delayed-execution

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

C++ 14使用is_same :: value的别名

这个问题用了is_same<uint64_t, decltype(val)>::value.

我希望那里是一个C++ 14 using alias:is_same_v类似于助手类型:conditional_t,enable_if_t,和tuple_element_t我在用我的答案.因为我唯一能使用这些功能的是获得type.所以*_t助手才有意义.

这让我想到了我的问题,为什么using alias is_same_vC++ 14中没有?我唯一使用is_same的是它value.也许is_same通常不用于模板声明?

c++ templates helper c++14 c++17

9
推荐指数
2
解决办法
2538
查看次数

C++ 21是下一个标准吗?

即使C++ 11推出,我也听到了很多关于C++ 17和C++ 14的讨论.

但现在我明白C++ 17有望在2017年秋季推出(没有概念),但我仍然不确定以下标准是什么.

我听说C++ 21开始了.那是准确的吗?

c++ standards revisions c++14 c++17

9
推荐指数
3
解决办法
8847
查看次数

有没有理由标准算法按价值取Lambda?

所以我在这里问了一个问题:Lambda在最新的Visual Studio上运行,但是不起作用在我得到响应的其他地方,我的代码是实现定义的,因为标准的25.1 [algorithms.general] 10说:

除非另有说明,否则允许将函数对象作为参数的算法自由复制这些函数对象.对象标识很重要的程序员应该考虑使用指向非复制实现对象的包装类,例如reference_wrapper<T>

我想知道为什么会这样?我们被告知我们整个生命中通过引用来获取对象,为什么标准是按值获取函数对象,更糟糕的是我的链接问题制作了这些对象的副本?这样做有什么我不明白的优点吗?

c++ algorithm lambda pass-by-reference pass-by-value

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

floor和duration_cast之间有什么区别?

所以在,Chrono Library提供了duration_cast:

计算以可用的最宽类型完成,并且仅在完成时将其转换为结果类型,就像通过static_cast一样

floor:

返回ToDuration中可表示的最大持续时间t,该持续时间小于或等于d

因此,对于所有人来说x,这两个调用的结果是相同的:

  1. chrono::duration_cast<chrono::seconds>(x)
  2. chrono::floor<chrono::seconds>(x)

c++ floor c++11 c++-chrono c++17

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

在Visual Studio中使用Lambdas进行模板化变量错误?

提供了可变模板,它在,但在lambdas中它们似乎分崩离析.例如:

template <typename T>
const auto PI = std::acos(static_cast<T>(-1));

int main() {
  auto func = []() { cout << PI<float> << endl; };

  func();
}
Run Code Online (Sandbox Code Playgroud)

在gcc 6.3上输出:

3.14159

在Visual Studio 2017上,此输出:

0.0

c++ lambda variable-templates c++14 visual-studio-2017

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

获取QComboBox的内容

我需要得到一个QStringList或一个包含所有QStrings 的数组QComboBox.

我找不到QComboBox这样做的方法,实际上我甚至找不到QAbstractItemModel这样做的方法.

真的是我唯一的选择:

std::vector< QString > list( myQComboBox.count() );

for( auto i = 0; i < list.size(); i++ )
{
    list[i] = myQComboBox.itemText( i );
}
Run Code Online (Sandbox Code Playgroud)

c++ arrays qstring qt qcombobox

8
推荐指数
2
解决办法
7161
查看次数

如何实现iomanip功能?

一些标准iomanip函数需要参数.

我想知道这是如何实现的,例如,我可以用函数做类似的事情吗?这真的是我需要这个答案的解决方案,但我无法弄清楚如何做到这一点.

当我查看setw函数的定义时,例如在http://en.cppreference.com中,它将返回类型列为"未指定",它也只列出一个参数,而不是stream&参数.这是如何运作的?

读者注意:

这个问题有一个很好的答案,但对于个人提出这个问题; 此答案仅在与以下功能结合使用时才有用ios_base:

c++ setw insertion extraction-operator iomanip

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

私有静态方法是否必要?

我上一家公司的主要工程师有一个规则,即private static方法应该作为实现文件中的函数实现,而不是作为类方法.

我不记得他的规则是否有任何例外.我在当前的工作中偶然发现了它的动机:如果有问题的函数的参数或返回类型是需要在标题中包含定义文件的对象,这可能会导致不必要的困难.

这足以让我远离private static再次使用某种方法,但在我把它们写下来之前,我想知道是否有人知道他们填充的利基,实现文件功能不会?

编辑:

这里的一个例子可能会有帮助.假设这是声明的开始,class Foo其他方法将void foo()在实现文件中调用:

class Foo {
    static void foo();
Run Code Online (Sandbox Code Playgroud)

所以foo只能通过其他方法访问Foo.为什么我不在foo实现文件中定义,并将它一起保留在标题之外?

c++ methods static private function

8
推荐指数
2
解决办法
761
查看次数