标签: subclassing

用于 C++ 的基于行的线程安全 std::cerr

什么是最简单的方法来创建我自己的,std::cerr以便它是逐行线程安全的。

我最好寻找代码来做到这一点。

我需要的是,当我在控制台上实际看到它时(并且不与其他线程的输出混合),由一个线程生成的a line of output(以 结尾std::endl)保持不变as a line of output


解决方案std::cerr比cstdio慢。我更喜欢fprintf(stderr, "The message")CriticalSectionLocker其构造函数获取线程安全锁而析构函数释放它的类内部使用。

c++ multithreading iostream stderr subclassing

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

对int进行子类化并重写__init__方法 - Python

可能重复:
从str或int继承

嗨伙计,

我试图继承int类没有任何成功.这是我的尝试:

class SpecialInt(int):
    def __init__(self, x, base=10, important_text=''):
        int.__init__(self, x, base)
        self.important_text=important_text
Run Code Online (Sandbox Code Playgroud)

如果我执行以下操作:

integer = SpecialInt(123, 10, 'rage of the unicorns')
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

TypeRror: int() takes at most 2 arguments (3 given)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?:)

python int built-in subclassing

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

C#中是否可以使用类初始值设定项?

在C#中,您可以使用对象初始值设定项在创建时初始化对象的字段,而无需使用构造函数.

现在我想知道是否存在类的等价物,这意味着在定义子类时可以"初始化"类的属性而不实际使用覆盖语法,而只是声明已知属性的值是什么.

例:

public abstract class Car {
    public abstract string Name { get; }
}
// usual approach
public class Mustang : Car {
    public overwrite string Name { get { return "Ford Mustang"; } }
}
// my idea of avoiding boilerplate code
public class Mustang : Car { Name = "Ford Mustang" }
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这个目标?如果没有,T4模板可以提供任何帮助吗?

c# abstract-class boilerplate object-initializers subclassing

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

Win32 子类化 - 关于消息

因此,我正在练习在 Win32 中对预定义窗口类进行子类化,以便我可以为预定义类定义自己的自定义消息过程(例如,为按钮类创建自定义 WndProc),并且我让它在大部分情况下都可以工作,但我可以' t 让 WM_COMMAND 消息自动发送到新消息过程。我可以在 WM_COMMAND 的父窗口中设置一个案例,并检查 wParam,然后为发送 WM_COMMAND 消息的子窗口调用相应的新消息过程,但我更希望像所有其他命令一样自动完成此操作。据我所知,我在定义的自定义消息过程中尝试过的所有其他 WM_ 都会从父窗口的消息过程自动传递给它,但除非我显式重定向它们,否则 WM_COMMAND 消息不会。我有一种感觉,当按照我设置的方式进行子类化时,WM_COMMAND 消息将始终发送到父窗口,但是如果有人可以解释为什么会出现这种情况,或者我需要做什么才能引导属于该窗口的所有消息按钮窗口到我定义的自定义 WndProc,将不胜感激。

代码:

#include <Windows.h>
#include <windowsx.h>

#define IDC_BUTTON   0


LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
LRESULT CALLBACK WndProcButton (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

HWND    g_hwndButton            = NULL;
WNDPROC g_wndProcButtonOrigianl = NULL;
BOOL    g_bSeeingMouse          = FALSE;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    LPSTR szCmdLine, int iCmdShow)
{
     static TCHAR szClassName[] = TEXT ("HelloWin") ;
     HWND         hwnd ; …
Run Code Online (Sandbox Code Playgroud)

winapi wndproc subclassing

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

Swift从超类调用子类的重写方法

我遇到一个子类的方法被调用覆盖一个方法的问题,所以我创建了一个小应用程序来测试它.当超类调用其子类重写的方法时,仍然会调用超类的方法版本,而不是子类的版本,它会覆盖超类的方法,应该是被调用的方法.

预期产量: sub foo

实际产量: super foo

超类:

class ViewController: UIViewController
{
    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent)
    {
        foo()
    }

    func foo()
    {
        println("super foo")
    }
}
Run Code Online (Sandbox Code Playgroud)

子类:

class SubclassViewController: ViewController
{
    override func foo()
    {
        println("sub foo")
    }
}
Run Code Online (Sandbox Code Playgroud)

polymorphism inheritance subclassing swift

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

子类化结构或类似物

我理解结构和类(和协议)如何在基本级别上工作.我有一个相当常见的情况:

我需要使用运算符的泛型值类型,它们必须在赋值时复制.这些类型具有复杂的结构,我希望能够通过子类化来专门化,否则会在任何地方复制代码,这将是糟糕的编程.

我已经尝试过协议和扩展但是因为协议不是通用的我无法定义我想要的(通用)运算符.如果我使用课程,我将不会复制作业.

今天的例子是我有Matrix和SquareMatrix,具有特定的方矩阵功能.有些运算符和矩阵可以由符合我的环协议的任何东西填充.我尝试使用关联类型和扩展来定义协议中的几乎所有功能.

编辑:我真的很想知道我应该编写什么.在矩阵情况下,我需要能够像任何其他矩阵一样传递方矩阵,所以子类化是唯一的选择吗?也许我错了.主要问题是当我必须编写一个讨论内部值的函数时,我必须知道泛型类型参数来做任何有用的事情.例如,当定义添加时,我必须创建一个新的矩阵并声明它的泛型类型,但是当我只知道某个(非泛型)协议时,我从哪里得到它 - 它的真实类型是通用的但是尽管协议具有这种关联类型,我没办法把它拿出来.

解决方案感谢alexander momchliov.基本上需要更多的工作来将代码完全移动到协议扩展中,并对所有相关类型使用"Self".在扩展中,编译器对泛型类型的内容感到满意.

代码是私密的,很抱歉,我无法在此问题中粘贴任何内容.感谢您的耐心和帮助.

generics struct subclassing swift

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

Cython 子类化“第一个基础”...“不是扩展类型”,即使它是用 cdef 定义的

我正在与 Cython 合作,为一个大学项目优化我的 Python 代码。为此,我想将 python 类转换为扩展类型。我目前在编译一种扩展类型时遇到问题,该扩展类型应该是另一种扩展类型的子类。这是我得到的错误:

src/core/ast/ast_classes/AstPreprocessor.pyx:9:27: First base of 'AstPreprocessor' is not an extension type
Run Code Online (Sandbox Code Playgroud)

AstPreprocessor的定义如下:

#Edit
from src.core.ast.ast_classes.AstBase import AstBase

cdef class AstPreprocessor(AstBase):
    cdef str function_name

    def __init__(self, function_ast, str function_name):
        super().__init__(function_ast)
        self.ast.index = self.ast.index.map(str)
        self.function_name = function_name
        self.symbol_list = super().get_symbol_list(self.function_name)

    #more method declarations     
Run Code Online (Sandbox Code Playgroud)

这是 AstBase 类的一部分,包括 中调用的方法AstPreprocessor#__init__()

cdef class AstBase:
    cdef int length
    def __init__(self, df):
        self.ast = df
        self.length = int(df.shape[0])
        self.childrens = {}

    #more method declarations    

    cdef get_symbol_list(self, str function_name): …
Run Code Online (Sandbox Code Playgroud)

python cython subclassing cythonize

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

自定义UINavigationBar sizeThatFits实现不返回实际的frame.size.width

我试图UINavigationBar用定义的高度子类并尝试实现sizeThatFits方法:

@implementation NavigationBar

- (CGSize)sizeThatFits:(CGSize)size {
    NSLog(@"frame: %@", NSStringFromCGRect(self.frame));
    return CGSizeMake(self.frame.size.width, 62);
}

@end
Run Code Online (Sandbox Code Playgroud)

但显然self.frame.size.width总是返回一个奇怪的值,这不是1024,这是我的目标,它导致下面的行为:

http://f.cl.ly/items/2X3S2u2v1q2X472i0P1z/Image%202012.12.04%2015:27:47.png

NSLog 输出:

> frame: {{224, 20}, {576, 62}}
Run Code Online (Sandbox Code Playgroud)

手动定义CGSizeMake(1024, 62)此操作将导致以下情况:

http://f.cl.ly/items/1x3y1w2J1K1A0f2r0i1c/Image%202012.12.04%2015:34:42.png

隐藏按钮和NSLog输出将是:

> frame: {{-128, 20}, {1280, 62}}
Run Code Online (Sandbox Code Playgroud)

有关如何正确实现此方法的任何想法,以便导航栏延伸到所有窗口?

resize uinavigationbar subclassing ios ios6

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

Python类属性和子类

我用谷歌搜索并播放了一段时间,但没有结果试图做这样的事情:

class  A(object):
    cl_att = 'I am an A class attribute'

class  B(A):
    cl_att += ' modified for B type'

class  C(A):
    cl_att += ' modified for C type'


instA = A()
print insAt.cl_att
>>> I am an A class attribute

instB = B()
print instB.cl_att
>>> I am an A class attribute modified for B type

instC = C()
print instC.cl_att
>>> I am an A class attribute modified for C type

print instA.cl_att
>>> I am an A …
Run Code Online (Sandbox Code Playgroud)

python class subclassing

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

以常见方式作为实例的一组函数

我对haskell很新,我认为我陷入了一些OO陷阱.这是一个结构(简化)的草图,我在实施时遇到了麻烦:

  • Observable的一个概念,它作用于样本列表(Int)以产生结果(Int)

    • 使用某种模式实现结果的SimpleObservable概念(虽然会有Observables以其他方式执行),例如平均值
  • 一个函数实例,例如一个平均值乘以常数的函数实例

我的第一个想法是使用一个子类; 类似的东西(以下是有点人为但有希望得到的想法)

class Observable a where
  estimate :: a -> [Int] -> Int

class (Observable a) => SimpleObservable a where
  compute :: a -> Int -> Int
  simpleEstimate :: a -> [Int] -> Int
  simpleEstimate obs list = sum $ map compute list

data AveConst = AveConst Int

instance Observable AveConst where
  estimate = simpleEstimate

instance SimpleObservable AveConst  where
  compute (AveConst c) x = c * x
Run Code Online (Sandbox Code Playgroud)

然而,即使像上面这样的东西编译它是丑陋的.谷歌搜索告诉我DefaultSignatures可能会有所帮助,因为我没有必要estimate = simpleEstimate为每个实例做些事情,但是从围绕它的讨论来看,这样做似乎是反模式.

另一种选择是没有子类,但是(具有相同的Observable …

haskell default class repeat subclassing

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