标签: overloading

重载打印python

我能够重载该print函数并从内部调用正常函数吗?我想要做的是在我要print调用的特定行之后print调用普通行print并将副本写入文件.

另外我不知道怎么超载print.我不知道如何做变长参数.我很快就会查看,但是 重载打印python告诉我,我不能print2.x中超载,这就是我正在使用的.

python printing overloading

45
推荐指数
6
解决办法
7万
查看次数

如何重载Python的__bool__方法?

可能重复:
在python中定义类的"boolness"

我认为这应该打印"False",为什么打印"True"?

>>> class Foo(object):
...   def __bool__(self):
...     return False
... 
>>> f = Foo()
>>> if f:
...   print "True"
... else:
...   print "False"
... 
True
>>>
Run Code Online (Sandbox Code Playgroud)

python methods overloading magic-methods

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

constexpr重载

相关:函数返回constexpr无法编译

我觉得constexpr在C++ 11中的用处有限,因为无法定义两个本来具有相同签名的函数,但有一个是constexpr而另一个不是constexpr.换句话说,如果我有一个constexpr std :: string构造函数只接受constexpr参数,并且非constexpr std :: string构造函数用于非constexpr参数,那将非常有用.另一个例子是理论上复杂的功能,通过使用状态可以提高效率.使用constexpr函数你不能轻易做到这一点,所以你有两个选择:如果你传入非constexpr参数,那么constexpr函数非常慢,或者完全放弃constexpr(或写两个单独的函数,但你可能不知道要调用哪个版本).

因此,我的问题是:

是否有可能符合标准的C++ 11实现允许基于constexpr参数的函数重载,或者这需要更新标准?如果不允许,是否故意不允许?


@NicolBolas:假设我有一个映射enum到a 的函数std::string.最直接的方式做到这一点,假设我enum去从0n - 1,是创建一个大小的数组n充满了结果.

我可以创建一个static constexpr char const * []并构造一个std::string返回(std::string每次调用函数时支付创建对象的成本),或者我可以创建一个static std::string const []并返回我查找的值,std::string第一次支付所有构造函数的成本调用该函数.似乎更好的解决方案是std::string在编译时创建内存(类似于现在所做的char const *),但是执行此操作的唯一方法是警告构造函数它有constexpr参数.

对于一个除了std::string构造函数之外的例子,我认为找到一个例子是非常简单的,如果你可以忽略constexpr(并因此创建一个非constexpr函数)的要求,你可以创建一个更有效的函数.考虑一下这个帖子:constexpr问题,为什么这两个不同的程序用g ++在不同的时间内运行?

如果我fib用一个constexpr参数调用,我不能比编译器完全优化掉函数调用做得更好.但是,如果我fib使用非constexpr参数调用,我可能希望让它调用我自己的版本来实现memoization(这将需要状态)之类的东西,所以我得到的运行时间类似于我通过constexpr参数时的编译时间.

c++ overloading compile-time-constant constexpr c++11

45
推荐指数
5
解决办法
8601
查看次数

45
推荐指数
5
解决办法
25万
查看次数

C++ 11中删除函数的确切语义是什么?

struct A
{
    A();

    A(const A&);
    A& operator =(const A&);

    A(A&&) = delete;
    A& operator =(A&&) = delete;
};

struct B
{
    B();

    B(const B&);
    B& operator =(const B&);    
};

int main()
{
    A a;
    a = A(); // error C2280

    B b;
    b = B(); // OK
}
Run Code Online (Sandbox Code Playgroud)

我的编译器是VC++ 2013 RC.

错误C2280:'A&A :: operator =(A &&)':尝试引用已删除的函数

我只是想知道为什么编译器A& operator =(const A&);A& operator =(A&&)删除时不会尝试?

这种行为是由C++标准定义的吗?

c++ overloading language-lawyer c++11 semantics

45
推荐指数
2
解决办法
5310
查看次数

为什么不能重载类模板?

阅读这个问题让我想知道:是否存在禁止类模板重载的技术原因?

通过重载,我的意思是有几个模板具有相同的名称,但不同的参数,例如

template <typename T>
struct Foo {};

template <typename T1, typename T2>
struct Foo {};

template <unsigned int N>
struct Foo {};
Run Code Online (Sandbox Code Playgroud)

编译器设法处理重载的函数和函数模板,是不是可以将相同的技术(例如名称修改)应用于类模板?

起初,我认为这可能会在单独使用模板标识符时引起一些歧义问题,但唯一可能发生的情况是将其作为模板模板参数传递,因此参数的类型可用于选择合适的超载:

template <template <typename> class T>
void A {};

template <template <unsigned int> class T>
void B {};

A<Foo> a; // resolves to Foo<T>
B<Foo> b; // resolves to Foo<N>
Run Code Online (Sandbox Code Playgroud)

你认为这样的功能有用吗?是否存在一些"好"(即技术)原因,为什么在当前的C++中这是不可能的?

c++ templates overloading template-specialization language-lawyer

44
推荐指数
2
解决办法
8451
查看次数

方法重载和覆盖有什么区别?

重载方法和覆盖方法有什么区别?任何人都可以用一个例子解释它吗?

java overriding overloading

44
推荐指数
2
解决办法
22万
查看次数

文字“ 0”是int和const字符串的有效候选者,并且重载导致模棱两可的调用

我最近修复了一个错误。

在以下代码中,一个重载函数是const,而另一个则不是。通过将两个函数都设为const可以解决此问题。

我的问题是为什么编译器只在参数为0时才抱怨它。

#include <iostream>
#include <string>

class CppSyntaxA
{
public:
    void f(int i = 0) const { i++; }
    void f(const std::string&){}
};

int main()
{
    CppSyntaxA a;
    a.f(1);  // OK
    //a.f(0);  //error C2666: 'CppSyntaxA::f': 2 overloads have similar conversions
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ overloading ambiguous-call

44
推荐指数
2
解决办法
1617
查看次数

Java - 为什么没有基于返回类型的方法重载?

我知道这是不可能的,但任何人都可以提供一个理论,为什么Java选择不支持这个?我问,因为我遇到了一个我觉得很高兴的情况.

java programming-languages overloading return

43
推荐指数
3
解决办法
2万
查看次数

如何在Java中选择两个同名的方法

我正在尝试访问我所创建的类中的方法,但由于它的名称和参数数量相似,我的IDE认为该方法不明确.这是两种方法的模拟:

methodName(X, Y, Z)
methodName(A, Y, Z)
Run Code Online (Sandbox Code Playgroud)

我调用了该方法,并null为了测试目的传递了第一个参数的值.不幸的是,我无法重命名方法,更改参数的顺序或以任何方式修改方法的结构.有没有办法可以区分这两种方法?

java overloading

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