标签: metaprogramming

功能模板部分特化的解决方法?

考虑以下关于积分pow的元函数(这只是一个例子):

class Meta
{
    template<int N, typename T> static constexpr T ipow(T x)
    {
        return (N > 0) ? (x*ipow<N-1>(x)) 
                       : ((N < 0) ? (static_cast<T>(1)/ipow<N>(x)) 
                                  : (1))
    }
};
Run Code Online (Sandbox Code Playgroud)

如何为这样的函数写停止条件?

c++ templates metaprogramming partial-specialization c++11

0
推荐指数
2
解决办法
1485
查看次数

检测参数字符串的代码行

我想有一个方法来快速将详细信息转储到日志中.它会是这样的:

public static void log(String message, Class<?> sourceClass){
    dump(formattedTime+sourceClass.getName()+"line"+lineNumberfromwhichthemessagecomes 
    (if several occurences are found, show all of them if there's no other way to
    detectwhere has the method been called from).
}
Run Code Online (Sandbox Code Playgroud)

我已经知道了关于创建一个新的Exception对象并获取其堆栈跟踪的第一行的行号的技巧,但是通过使用它我必须添加行号作为参数,因为如果你在log方法中做了这个技巧,您将始终获得相同的行号(您进行操作的行之一).

有没有办法实现这一目标)?

java meta logging metaprogramming line-numbers

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

如何知道我目前所处的方法

在我写的一个方法中,我的代码怎么知道它当前在哪个方法?我需要这个,因为我想获取方法名称并解析它以获取它的一部分,例如"add_order",然后我可以使用第二部分"order"来处理.

ruby metaprogramming

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

为什么类型扣除不能按预期工作?

我对C++元编程中的类型推导有一个小问题.有一定的功能做一些动作.

main.cpp中

template<typename T> void foo(T arg) {
    // do some action on argument
    std::cout << typeid(arg).name() << std::endl;
}


int main(int argc, char** argv) {
    int array[100] = {0};
    std::cout << typeid(array).name() << std::endl;
    foo(array);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

A100_i
Pi     
Run Code Online (Sandbox Code Playgroud)

为什么精氨酸在函数foo的()具有比另一种数据类型数组函数main()中

c++ metaprogramming type-deduction

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

宏观元编程恐怖

我想做的事情如下:

custommacro x;
Run Code Online (Sandbox Code Playgroud)

这将扩展为:

declareSomething; int x; declareOtherthing;
Run Code Online (Sandbox Code Playgroud)

这甚至可能吗?

我已经把它欺骗了一次,operator=表现得像那样,但它不能用声明来完成.

c++ macros metaprogramming c-preprocessor

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

当我有Foo.abcd时,有没有办法知道d是链中的最后一个方法?

用于Foo.a.b.c.d:

  1. 我可以以某种方式获得整个链,例如,[:a,:b,:c,:d]
  2. 有没有办法找出那个:d链中的最后一个方法调用?

ruby metaprogramming

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

如何定义一次方法,但同时将它作为类方法和实例方法

有没有办法获取实例方法并将其添加到类中(反之亦然)?

这是我的尝试,但它失败了因为Ruby不让我将实例方法绑定到类:

#!/usr/bin/env ruby

SOMETHING = :a
class SomeClass
  def some_method(variable, value)
    case SOMETHING
    when :c
      "output for case C"
    when :a, :b
      "output for A or B"
    end
  end
  # here's my failed attampt to add some_method to SomeClass:
  self.instance_method(:some_method).bind(self)
end

# it works as an instance method
bash = SomeClass.new
puts bash.some_method("EDITOR","vim")

# but not as a class method... yet
puts SomeClass.some_method("EDITOR","vim")
Run Code Online (Sandbox Code Playgroud)

错误是"bind参数必须是SomeClass的实例".换句话说,我不能调用bind(self)因为self 类而不是类的实例.

ruby metaprogramming

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

抽象Django模型经理

我这里缺乏Python元编程知识.假设我有以下内容:

class OwnCompanyManager(models.Manager):
    """Only companies of this user"""
    def get_queryset(self, user):
        if user.is_superuser:
            return super(OwnCompanyManager, self).get_queryset()
        return super(OwnCompanyManager, self).get_queryset().filter(
            companyuser__user=user)


class OwnPublisherManager(models.Manager):
    """Only publishers of this user's company"""
    def get_queryset(self, user):
        if user.is_superuser:
            return super(OwnPublisherManager, self).get_queryset()
        return super(OwnPublisherManager, self).get_queryset().filter(
            company__companyuser__user=user)

class Company(models.Model):
    name = models.CharField(max_length=45)

    objects = models.Manager()
    own = OwnCompanyManager()


class Publisher(models.Model):
    company = models.ForeignKey(Company)
    allow_latest_dev = models.BooleanField(default=False)
    domains_blocked = models.BooleanField(default=False)

    objects = models.Manager()
    own = OwnPublisherManager()
Run Code Online (Sandbox Code Playgroud)

我还有很多.我不喜欢复制粘贴样板Own(Publisher|Company|Etcetra)Manager).正如您所见,唯一的变化是在过滤器中.

我怎样才能提取Own(InsertModelNameHere)Manager和使用它Company,Publisher和其他车型?我想在管理器定义中指定过滤器kwargs.

python django metaprogramming django-models

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

如何确定Matlab函数是否返回值?

调频:

function [] = f(the_only_argument)
% Do awesome things here
end
Run Code Online (Sandbox Code Playgroud)

GM:

function [value] = g(the_only_argument)
% Do awesome things here
value = awesome_value;
end
Run Code Online (Sandbox Code Playgroud)

是否有某种ReturnsNothing,这样:

assert(ReturnsNothing(@f) & ~ReturnsNothing(@g))
Run Code Online (Sandbox Code Playgroud)

PS我希望能够调用arrayfun(@f, [1,1,1]),目前返回错误:

??? Error using ==> f
Too many output arguments.
Run Code Online (Sandbox Code Playgroud)

reflection matlab metaprogramming

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

如何根据模板中的类型编译函数?

我希望能够做到这样的事情:

template <typename template_type>
class awesome_class{
public:
    void some_function(void){
        // if (template_type == type_a)
        cout << "I am of type_a and doing type_a specific methods";
        // endif

        cout << "I am not of type_a and doing my normal methods";
    }
}
Run Code Online (Sandbox Code Playgroud)

我基本上想扩展一个模板化类,如果它是一个包含特定成员变量的类型,那么运行一些由于成员变量而可能的优化代码,但是如果它不属于那个类型那么只需忽略该部分代码

这在C++中是否可行?或者我是否完全错了?

编辑:我专门的功能基本上要求我这样做几乎班上的每一个功能.那时,我不妨再做一个专门针对有关类型的课程.再次,谢谢你,学到了一些新的和有价值的东西,可能会在其他情况下派上用场!

c++ templates metaprogramming template-meta-programming c++11

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